Showing posts with label softwaredeveloper. Show all posts
Showing posts with label softwaredeveloper. Show all posts

7/28/2019

Programmers and soft skills

Introduction
Who are the famous programmers? Everyone knows Bill Gates and Linux Torvald. A lot of programmers also know Uncle Bob (Robert C. Martin). Why did they become famous? Are they so deep technically? For sure they are technically good, but there are a lot of programmers all around the world who are technically awesome and almost no one knows them. Why are they special then? They know something what others are lacking. These are the so called soft skills: good communication, marketing skills, self management, time management, great presentation skills etc. These skills are making them different, these skills are making them outstanding. And these skills can help every programmer to get a better job, to do a better career and to be more successful. There’s something great: you can improve these skills any time. And it totally makes sense to improve these skills. This is the way to success.

How to improve soft skills

As I just mentioned you can improve these skills anytime. One hand most companies realized how important these skills are, so they are offering trainings for these areas. Join these trainings!
On the other hand you can read a lot about them on the internet or you can buy some nice books.
But what is more important: these are practical skills. It is not enough to learn the theory. You have to use them in your daily life. You can always pay attention on practicing them as much as possible. And not only during work. You can practice them at home with your family or with your friends as well.

The most important soft skills for programmers

Time management

As a programmer have to answer emails , participate in meetings, help the other colleagues and be done with your tasks until the due date. This is really challenging. Either you are doing a lot of over hours or you are starting to use some time management technologies, like prioritizing your tasks based on their urgency etc. Without good time management skills it is really difficult to survive as a programmer.

Self management

If you want to do a career you need to be able to find the right positions for yourself, you need to see when do you have possibilities to prove your skills, you need to know when is the right time to change. And you need to be able to show to others that you are working well. Most programmers who are not getting promoted only because their outstanding programming skills, they are also able to sell their work to the management.

Communication

Programming is not the profession of lonely wolves, even if several people things that it is.
Programming is teamwork and to be able to work in a team you need very good communication skills. You need to understand the problems of the others, you need to ensure them about your solution and you need to be able to communicate your status in a very clear way. You also need to communicate to your managers and in several cases to the customer as well. It is really important to communicate to them in a nice and clear way. As a first step I would suggest to learn about assertive communication.

Presentation

As a programmer, especially if you are on a higher rank you have to do several presentations. These are either technical presentations (kind of trainings) or presentation about the content and the state of the project. These presentations should be done in a professional way and you need to learn it, what does it mean exactly.

Stress handling

Working as a professional programmer is mostly stressful. Stressful because of the strict due dates and because of the conflicts inside the developer team or between the team and the management. You need to be able to handle this stress in a proper way, otherwise you become either aggressive or depressive, worst case both of them. And this can have a negative impact not only on you and on your work, but also on your family and on your friends.

Basic marketing skills

You need some marketing skills if you decide to do your own business, it is pretty clear. But also as a developer if you are looking for a new job you need to do a kind of self marketing. You are basically a product on the developer market and you have to sell yourself for the highest possible price.

Summary


As you have seen you need several soft skills to be successful and a developer, but luckily you can learn them easily, it takes just some time.

4/12/2019

How to negotiate your work as a developer?

Effectivity has a different meaning for a manager and for a developer. As a developer you know about the task how complex it is. In case of managers sometimes you are doing something using really all your power, you think you were really fast and the management is not satisfied with your, in other cases you do something easy and the management will be really satisfied. Crazy…

The point is that as a developer one of the most important soft skills is the knowledge, how to sell your work. How to negotiate with the other how complex is what you are doing. If you are negotiating well you can make the management more satisfied even if you keep do the same work as before. It can be also useful to know how negotiate your work if you are working directly with the customer or if you are discussing with other developers.

So the goal is to show someone else, who is most of the cases not so experienced with the topic, that your task is taking a bit longer. These people often things that “you just need to add one more button, it shouldn’t be complicated”. What it means in the reality? You need to setup the environment, understand the existing code, change the frontend, change the backend, setup the communication between the frontend and the backend, test your functionality and update the documentation. Furthermore you need to take part all the meetings related to the topic. And all of this takes time, pretty long time, even if the functionality itself is not complex.

Earlier I have written about how to do an estimation. Now the topic is how to let your manager/customer understand your estimation.

If you are simple replying that “Well, to add this button will take me three and half days”, then the answer will be simple “no way, it is too much”.

First rule: always ask some time to investigate the task. It makes the feeling that you are doing a really professional estimation instead of bullshitting and of course you can also consider all circumstance which can influence your estimation.

Next rule: split your task into several subtasks (more is always better). And make an estimation for each of the subtasks.
Like:
  • Setup working environment (get source code, compile it, install dependencies): 4 hours
  • Read all documentation and understand the current implementation of the button functionalities: 4 hours
  • Plan how to add the new button with the expected functionality: 2 hours
  • Add button to the frontend following the current design: 2 hours
  • Implement related functionality to the backend:4 hours
  • Implement unit tests for the new functionality: 2 hours
  • Connect backend and frontend: 2 hours
  • Do functional level testing on multiple operation systems and fix potential bugs: 4 hours
  • Code review and integration with the current code base: 2 hours
  • Attend related meetings (planning, demo, review etc.): 2 hours
SUMMARY: 28 Hours

So now you showed that is takes 28 hours, which is exactly three and half working day. Most likely some of the points are a bit overestimated, like most likely integration won’t take 2 hours, but nevermind, at each task there are some unpredictable issues which takes time (not working compilation, magic bug, huge git conflict etc.), you can use the overestimated time there. Now since you have a nice detailed list noone can really tell anything against your estimation.

You need to always see the following: for most of the subtasks are used either 2 or 4 hours as estimation. It is on purpose: 2 hours is small enough, so no one starts to negotiate that “Could it be done in 75 minutes?”. No, 2 hours is short enough to be acceptable for any task. 4 hour means that it is more complicated than the 2 hour-long subtasks. Against that it is also difficult to negotiate: if the other task takes 2 hours and this one is more complicated then let it take 4 hours, which is a bit more than 2, fine. If your estimation for a subtask would be more than 4 hours split rather the subtask in multiple one. Because if you are telling that “it takes 10 hours” then it is easy to tell that “It should fit into 8 hours”. But if it is splitted into 3 clear subtask no one will argue.

It is also important: find names for the subtasks which are easy to understand also for the one who are not technically deep in the topic. It makes the feeling for the manager/customer, that he totally understands what you are doing (even if it is not true) and it makes more trust.

When you are talking about your estimations user phrases like “based on the experience from previous tasks”, “it is similar to one of my previous tasks”, “last time unit testing took also so long” etc. It makes the feeling the you are really professional and you really do what you are doing.
If the customer/manager still thinks that it takes too long you can just tell, that “yes, I see, this is current estimation, we can make it faster but leaving xy sub functionality”. So always offer a limited functionality which takes pretty clear less time for your to be implemented, but never tell that you can do the same functionality in less time, because it makes your whole estimation meaningless.


These are all my tricks I used at negotiation, I hope they are helping also for you! If you have other good strategies feel free to share them!

4/07/2019

7 good opportunities to do networking as a software developer


Networking is really important nowadays independent from that what you are professionaly doing. Networking means to know the right people, who can support you in case of need (and of course who can be supported by yourself). To have a good network as a software developer means that if you would like to change job you are not applying blindly for jobs, but you are asking your network for opportunies. Or if you need new colleagues you are also just asking your network for recommendations. A good network means to get better opportunities faster.
That’s really nice, but how to extend your network? First of all normally you are having a network from your workplace: colleagues, customers. Keep connection with them. But usually they are not changing frequently, so it is good to find other ways to extend your network. I collected some ideas.


LinkedIn

First of all you need to be registered to LinkedIn. This is a professional social network, where similar to Facebook you can manage your friends. Your profile is like a CV. LinkedIn is the best place to find new job opportunities and to extend your network with the right people. Really often the job opportunities find you, unless you did anything. At the beginning set up a strong profile, connect your current network (colleagues, customers, ex-colleagues, friends from university etc.) and wait until others (mostly recruiters) find you.

Dev.to and other online developer communities

There are several developer communities on the web. I found Dev.to as the best one. Other are sharing their experience in their posts. You can comments and also write posts. There’s also opportunity to ask questions from the community. It is one of the best ways to get in touch with developers from all around the world.

Mentoring on exercism

There is a good chance to support less experienced programmers by reviewing their code and give them feedback on exercism. You need to register yourself and apply to be a mentor for a specific programming language. Later on you can review the solution of others. The mentors also have a slack channel where you can set up new connections with other mentors.

Contribute to open source projects

The most classical way of self-marketing as software developer is to contribute open-source projects. There are several interesting open source projects up to your interest. New volunteers are always welcomed to implements new features. Your code will be reviewed and you can get part of the developer community there. It is also a good reference if your are applying for a new job.

Join developer conferences

There are several developer conferences all around the world in different topics. They usually takes 1-3 days long and all the biggest companies are there who are working in the area. There are usually nice presentations and also space for open discussions where you can get new high-value connections. One disadvantage of such conferences is that they are usually a bit expensive.

Join meetups

Similar to conferences you can just join meetups. These are professional events where you can meet with the local developer community. It is also a good opportunity to get familiar with the local developers companies, since most of such meetups takes place at local companies. Meetups are usually after the office hours. The usual program goes about presentations and open discussions. The big advantage is that they are free. So just go to meetup.com, search for relevant groups at your place and join their events.

Write your own blog


Last but not least you can write your own blog. It is also making some chance to extend your professional network.

3/07/2019

10 Points to make your ramp up faster at your first workplace


Don’t think that you are the best

It can be that you  were part of the best students at the university and you could achieve all tasks there. It is also most likely true, that due to you fresh studies you are more up-to-date with the newest technologies than you colleagues. But your colleagues has multiple years experience in the field you are working in. It was always a bit strange for me, but as a student I thought that I’m good and as I started to work I was encountered as a beginner. It’s totally true, I had no experience, so it took me much more time to resolve tasks than for my more experienced colleagues. Luckily it changed with time. That also happened that there was some kind of used practice at the company which seemed to be totally useless for me. I just clarified it with my mentor and I understood their decision.
To summarize this point: you will be encountered as a beginner and you are a beginner in fact, count with this fact and if you are doing well you can change it with time.

Be patient

As you are joining a new company at the beginning you need to wait a lot: wait for your hardware, wait for you licences, wait for your access to the source code and wait until your colleagues find time to clarify topics for you. You need to be simple patient. Your colleagues also have their tasks, most of the cases with a due date, that’s their first prio. You can be sure, they will support you as soon as they can find time.

Pay attention on what your colleagues are doing

You can also use the time, until you are waiting. You can also learn a lot without blocking your colleagues. Simple keep an eye on them and try to understand what and how they are doing. You can also check their commits in the version control system, check what was their task and how they solved it. You can also check what kind of meeting are they attending and what is the scope of these meetings. So that you can learn really a lot without blocking others.

Collect keywords and google them

At the beginning for sure you will hear a lot of keywords, technologies which you have never heard before. If you hear such a keyword just take a not and later if you have free time google it and try to understand what is it about. If it is still not 100% clear you can of course ask someone, but then you can already ask more directed questions. It makes a much better impression. So instead of “but what does MVP stand for?” you can just ask that “I’ve heard that you are using the MVP pattern in your architecture, could you please clarify how is the presenter layer working?”. Sound much better, right? You can reach this point after 10 minutes on Google.

Collect a list of questions

Do not block your colleagues with each and every question. First try to collect a list a questions, make sure that the one has some time for you and go through on all questions in the same time. Take notes about the answers. It is much more effective, than just asking something in every 10 minutes. And it is also much more effective than “please tell me everything about your project”.

Be patient at working on boring tasks

Most likely at the beginning you will get some boring tasks. Do your best on them and so that you can get much better tasks soon. If you are not achieving the boring tasks with good results you will never get more interesting tasks.

Communicate your issues

Let always your team mates, mentor and manager know what are your current issues. For example if you are blocked, because you don’t have access to the code, don’t just sit and wait, but let your manager know that you have this issue and it blocks you at work.

Build connections

For building your career it is really important to know the right people at the company. During your first weeks try to get know as much of your colleagues as possible. The best way if you are doing some short talks in the kitchen, during lunch and so on. Always try to figure out who is the person, what is their role at the company and for which project are their working for. You can also take later on some short notes (but don’t do it during the discussion!).

Do regular feedback to your managers

That’s normal that at the beginning you don’t know your managers, so that you also don’t know their exact expectations. It is a good practice to ask them for a feedback regularly (maybe once a month) in the first period. So that you will be able to see if you are working in the right way or not.

Be hard working

In the first month do really your maximum, to make a good impression.

+1. Pay attention on work-life balance


This is a special point and it is maybe does not really stand for the first months. I just realized that there are a lot of workaholic developers, especially young ones at their first job. This means the one would like to fulfill all the expectations. That’s why he is working a lot, does regular over hours. So that their manager will give them more and more tasks, so they are working more again. And they are starting to cancel or shift their private programs, choosing to work in the evening instead of meeting with their friends and so on. This kind of working style is leading easily to a burn out, so try to avoid it! On the other hand it is also not always the right way to build up a good career. You will considered as the guy, who is overtaking every shitty task and not as the guy who can achieve every difficult task. And it makes a really big difference. Always set up the priorities of your life and keep them always in front of your eyes.

1/24/2019

How to choose the right comapany for you?

To choose the right company for yourself can be really difficult, because each company is different. Of course it makes sense to read the evaluations of companies on websites like glassdoor or ask people who are already working there. But as a first step you need to figure out what kind of company are you looking for.

I tried to set up four main categories of the software companies. Not all the companies are fitting 100% into one category, some of them are overlapping between multiple categories. I tried to cover the four most typical type of company, describe how are they to working, what are the advantages and disadvantages of them. This is mainly written based on my personal experiences and experiences of friends.

Let’s see the four big categories:

  1. The multinational company

There are several well-known multinational companies all around the world which are working with software developers. Their main focus is not always just software development. Most of these companies are well-known, so if someone is asking you where are your working you can proudly tell the name of the company and everyone around the world will know it.

These companies are usually to really directed by one person, in a lot of cases the one who established it already died years ago. The same company is usually present on multiple continents and in multiple countries. Some of these companies were either startup or family business at the beginning.

Advantages of at a multinational company:

  • Salary over the average
  • Connection with people all around the world
  • Well-defined processes
  • Good opportunity for specialists to go deep into a topic
  • Option for travelling
  • Good company events (Christmas party etc.)
  • High variety of trainings
  • Long future at the same company


Disadvantages:


  • High bureaucracy
  • Quite often it is difficult to change to new technologies and new topics
  • Usually the work is done in big open-offices, which can be stressful
  • Strict due dates
  • To high manager/developer rate
  • Often not enough space for new ideas (you need to use what is already done)
  • These companies are often stucked to 20 years old code base


  1. The startup

A startup is a new company with a new idea. At the beginning it is usually financed by sponsors. The successful startups will either become a multinational company with time or they will be simple bought by an already existing multi. The unsuccessful startups will either just go into dept or they will stay as family business.Working at a startup is in my view a bit more than a normal job. You need to believe in the goal of the company and you need to do everything for that.

Advantages of working for a startup:
  • New technologies
  • Great technical challenges
  • Big freedom
  • Interesting product

Disadvantages:

  • Uncertain future
  • Less focus on work/life balance

  1. The consultancy company

A consultancy company is a software house which is overtaking projects of other companies (most of the cases it is a multinational company). If you are working at such a company you will change your projects frequently, you will work with multiple technologies and multiple code bases. Most of the cases communication with the customer also belongs to your tasks. You can learn a lot of technologies, but the constant changes can be stressful after a while. Your freedom on technical topics can be limited by the customer (you won’t be allowed to make bigger decisions).
One of the most difficult issue for the leaders of such companies is to be flexible enough. Just imagine: your customer which was using 10 of your developers for a project just telling you that from next month you need only a team of 4 developers. You need to plan something for the other 6 developers urgently. Or other way around: all of you developers are busy with projects and a good opportunity is coming where 10 developers should start from next week. This is challenging.

Advantages from developer point of view of working at a consultancy company:



  • You can learn multiple technologies
  • You can get connected with a lot of people
  • You have always new challenges
  • You can work for multiple companies without changing employer

Disadvantages:

  • Frequent changes can be stressful
  • It can happen that you are sitting without project for a while
  • Most of the cases you can not go deep enough into topics

  1. The family business

Not all the companies in this category are really a family business. I mean here the mostly smaller companies which are working on one product or service for long time which has a certain amount of users. The company is not taking big risks and not investing too much into new products, they are just doing the same thing since long. It can be either some web application (like creating really similar webshops) or a mobile application (again nothing really special) or anything else. It is also typical for such companies that they are using some older technology which is working well, so they are not changing it. These companies are usually not really growing. It is ideal for people who doesn’t like stress.



Advantages of working for such a company:



  • Less stress
  • No needed learning curves
  • Good work life balance
  • The team is like a family

Disadvantages:

  • It can be boring to work there
  • Not all of such companies can survive nowadays
  • No opportunity to build a real carrier

I hope you could get some info to start to figure out which type of the companies is really for you.

11/22/2018

How to prepare yourself for an interview as a software developer?


Introduction

Attending a job interview is really not easy and it can be quite stressful, but that’s almost the only way to get your dream job if you don’t have a good network. Your performance at a job interview can decide if you are getting the new job or not, you need to be fit from technical point of view and you need to pay attention on your way of communication as well. With a short preparation you can make your chances much higher. All the next points are based on my own experiences. I attended many interviews from both sides: as an interviewer and as a candidate. In this article I’m trying to summarise my experiences.

The application process is different at every company, but it’s a good idea to figure out what is waiting for you. The interview can be just a short introduction focusing on that what you are searching for. It can be an interview where they are focusing on your personality. Or it can be a technical interview. And it can be any combination of these three. So if you are getting an invitation for an interview and based on the invitation it is still not clear what will be the topic of the interview feel free to ask. You should clarify the language of the interview as well.

How to prepare yourself for the different type of interviews?

If it is an interview an HR partner most likely it will focus on that what you are searching for and on your personality. In this case you should not expect deep technical questions. Most likely you will go through your CV and you need to talk about your experiences. So before attending an interview always read through your own CV and try to introduce all your previous workplaces for yourself, focus on that what you were really doing there, which projects were you supporting, which technologies did you use, which responsibilities did you have. You should talk ca. 2 minutes about each previous position. There can be questions regarding studies as well, then you need to tell what were your studies, what was the main focus, what was the topic of your thesis. One more important thing: for sure you will be asked for what you are really looking for. For this question you need to have a clear answer. Like “I’m looking for a C++ developer position, where I can deal with software architecture as well”. Next to that there are some typical HR questions. To be honest for me it was always the most difficult part for me. Because I have no problem with talking about technical topics, but answering questions like: why are you better than the other candidate, or what is your strength and weakness is really difficult for me. So I would suggest you to collect the possible HR questions (you can find a lot of collection of them online, with some ideas what to answer), make a list from them and write down your answers. So that on the interview you won’t need time to think about.
At most of the companies there is a technical interview as well. But some companies are merging the HR and the technical interviews. As preparation for the technical interview read again the job description, which you applied for and the main technical skills in your CV. Of course you can not learn everything in some days, but it’s helping a lot if you are checking these topics before the interview. For all technical topics there are some popular interview questions. Like if you applied for a C++ developer job I’m almost sure that there will be questions about smart pointers and about multithreading. At the preparation try to focus on these topics. For all technical topics you can find interview question collections online, read them through and try to answer, if you can’t answer google it. If you are still not feeling comfortable enough my suggestion is the following: apply for jobs which has a similar description, but you are not really interested in the company (it is too far from your place, you heard a bad feedback etc.). So if you wanna have a job as a java developer apply for some java developer position even if they are not so interesting for you. Then you can take part on some interviews, where you have absolutely no risk, so you can try out yourself without stress and you can figure out what are the typical questions in that field.
Before the interview always try to find some information about the activities of the company. It can help a lot if you are thinking a bit before what can be their technical challenges or which technologies are they using.

How to behave during the interview?

During the interview stay calm and confident. The interviewer may try to make you feeling uncomfortable, but try to stay calm. Typical questions for making your feeling uncomfortable are questions like “Why would you like to change your job?”, “Why are you better than the other candidates?”, “How is your connection with your current boss and colleagues?”. It is good if you are preparing some answers for these question before the interview. They should be honest, but political correct. So it is not a good idea to answer: “I hate my boss, because he’s a shitface.”, better to tell: “Sometimes it is a bit difficult for me to ensure my boss about my ideas.”.
If you are already at the interview try to give always your best answer, stay calm and confident. But one important thing: don’t be shy to give the following answer: sorry, I don’t know, I have no experience with that. So you can save a lot of time for the interviewer and some uncomfortable minutes for yourself. At most of the interviews it is not a problem if you don’t know everything, but that’s a problem if you are telling something what is totally not true. It happened thousand times with me as well. When I’m leading the interviews and asking the candidate: “do you have experience with QT Signal-Slot model?” I’m usually get the answer: yes. And then for the question: “How does it work?” I don’t get a clear answer, just some bullshit. So that’s something to avoid, it is much better to tell: “No, sorry”, then no problem, let’s talk about some other topic.
There’s one more thing: a job interview is like dating: both sides try to make sure that you are matching together. So you need to show your best side: mention everything what you can do, but don’t lie, they will realise and you can get some really uncomfortable situations. On the other hand you need to check if the company is fitting to your needs or not. At the first part of the interview let the interviewer ask, but after that normally the interviewer asks you if you have any other questions. Yes, you should have! Ask about the position, ask about the company, ask about the used technologies. So that you can have a clear picture about the opportunity and you can decide if you wanna join them at all. On the other hand it makes a better feeling to the interviewer as well, it makes the feeling that you have real interest in the position.
On the day of the interview don’t make any stress anymore. Fine some matching clothes. At this point you should follow the dress code of the company. Check their website before and if they have pictures check what their employees wear at work. The most important: go there in time. It is better to plan your arrival 20-30 minutes earlier than the start of your interview. A lot of thing can happen: no parking slot in the near, traffic jam, your train is late, you can’t find the address etc. But if you are arriving too early don’t enter the building. Use this time to walk around the building and check everything what can be interested: where are parking slots, is the a place where you could eat etc. Enter the building around 10 minutes before the start of your interview. Go to the reception introduce yourself and tell that you came for an interview. Never forget the name of your interviewer (if it was in the invitation). At the beginning of the interview most of the cases you will be asked if you need water. It is good to say yes. You can always win some really useful second during the interview by drinking some water. In the meanwhile you can think about the answer. Regarding winning time: if you know the answer but you need to think some seconds you can start to bullshit. OK, this is maybe not the most correct word, but what I mean here is sentences like: “Yes, I had to solve such a problem at my previous project, it was quite complicated to find the solution…” and the you have some seconds in the meanwhile to formulate your answer. Or just one more example: the question is how locks are working in multithreading. Then you start with that what is locking and why is it necessary at all and at the end you can tell how it is working, but then you had some time during your introduction to formulate your answer.
And last but not least: at an interview your technical knowledge is not the only thing what is checked, your attitude, your personality and your way of communication is very important as well! Be honest, open-minded, look motivated, that a half success.

The big question regarding salary

One of the most interesting part of the interviews is the salary. Usually this topic is coming up only at the end of the interview. Let the interviewer come up with the topic. If the topic is not coming up don’t worry, maybe it will only come up on the next round interview. Regarding the answer: If I’m searching for something new I’m always deciding first what is the minimum salary I can accept. When I’m asked about my salary needs I’m usually telling 10-20% more than this amount, but I’m mentioning that I’m flexible. So if the company can pay my wish for the position I will be more than my minimum expectation, if not there’s still space for some further discussions. For me this strategy worked well. If you have no idea about what would be realistic use google: there are several pages which can tell you what is the average salary for a specific role in your city!

Summary


These were my tips for this topic, I hope I could help you, feel free to extend it if you have more ideas. So prepare yourself for the typical questions, know what you want, be honest and do your best! I wish you a good luck at job search!

How I prepared my first online course

Since long I didn't publish anything here. It's because I was busy with some other topics, but now it's time to share the result...