December 12, 2011 Career
December 12, 2011 Career
Recently I’ve got e-mail from guy, looking for some advice. At glance it sounds like he is worrying about finding his first job as software developer and willing to get some hints/advices.
First of all I would like to thank very much to those people who read my blog posts and who comment or send me e-mails. This is the best feedback I can get and it is the only true measurement of blog’s success.
So, I’ve got this well-written e-mail from student (I guess):
Hi Andriy,
Hope you are doing well. My name is Wes, I just read your articles, I have to say, I am your fan now.. Guys like you make a difference.
I am writing to you because I have the similar passion for programming as you, and that is why I went for my bachelors in Software Engineering, and while in school, I learned many languages like C, C++, Java, VB.NET and ASP.NET.
Out of all, .NET excites me the most. But now when I am about to graduate, I dont really feel good about my programming skills, and getting a job.. The best I have done in VB is made a calculator, made connections to the database, and executed some queries.
What I want from you, is some tips about what my approach should be at this point AND are their any sample projects that you recommend I should do, that will help me learn more and expose me to different sides of the programming world..
I would highly appreciate, if you write back, and I am sure you will.
Thanks – and good luck with your career!
Cheers!
Wes
I’m replying publicly, so I can share with other’s who have similar questions. Wes is not mentioning his last name so you won’t identify him :). Anyway I think that this e-mail is good one and it raises good questions. Starting from now “you” means either Wes or any other starting programming guy looking for some advices.
First of all seeking for personal improvement is great step towards it. I think that once you have clear goal and passion about it you won’t waste your time and life.
I just came across small e-book where found great answer for you from Karl Seguin:
“… If you’re willing to take the time and try it out, you will see the progress. Pick a simple project for yourself and spend a weekend building it using new tools and principles (just pick one or two at a time). Most importantly, if you aren’t having fun, don’t do it. And if you have the opportunity to learn from a mentor or a project, take it – even if you learn more from the mistakes than the successes.”
So I will expend this thought a little bit further.
You would need to write many projects – the more the better. Keep your hands dirty and work with the code, every other day you should feel that code, you wrote yesterday is crap and you can write it better today. If you are still student in Software Engineering be sure that you are fulfilling you time with programming. If you feel that learning courses are not supplying enough tasks for you, just create them for yourself.
I know that when being a student it is very interesting to take part in some sport programming competitions. So do it. You can also take part in some online competitions like Algorithm competitions at TopCoder. Those can be for your gym.
Definitely you need big projects to work on as well. These projects should take from couple days to couple of weeks. Write your own “paint”, not comprehensive one, but at least with basic functionality. Write your own money accounting system with your database, so you learn all basics of data access. You then can change data access from simple ADO.NET to ORM (try Entity Framework or NHibernate), you then can try to explore non-relational databases, like NoSQL. Do some web programming, if you did ASP.NET you can explore MVC ASP.NET. Explore mobile development by just writing same simple calculator for Windows Phone 7. You will get familiar with some Silverlight/XAML. If you are excited about .NET make sure you know C# (personally I cannot understand why Microsoft promotes VB that much, trend is C#).
Find your peers interested in programming. Learn programming in fun way, enjoy it.
Whatever you do, make sure that google in your force.
You will need to learn continuously. Read many books, but know that human forgets 90% of things heard, 60% seen & only 10% of things done. So if you read, but not try things read your time can be wasted. I have another blog post where I propose some tips on how to become successful developer, read those.
As of job. Ask older peers what are opportunities in your location. Visit software companies near you, ask them if they have some learning courses, which skills are in demand for that company. I ensure you, this is not as much difficult as you might be expecting. Also here is my article about career plan for software engineer. Probably it is too early for you to think deeply about career before you actually started as developer, but at least make sure you know how your future job might look like.
So key things:
Hope I have been of some help for you, Wes and Dear Reader.
Markdown | Result |
---|---|
*text* | text |
**text** | text |
***text*** | text |
`code` | code |
~~~ more code ~~~~ |
more code |
[Link](https://www.example.com) | Link |
* Listitem |
|
> Quote | Quote |
0. Think, think, think. Think again. (do this before every decision you are going to make, don't rush, be calm and just take your time to think again)
1. Write your own pet project first. This will be right thing to put in your resume and to show on the future interview. (make sure you are using source control)
2. Make sure you really want this. While writing your pet project ask yourself as honest as you can "Do I really like what I am doing or it's better to go and play XBOX/PS3/whatever". It is okay to choose xbox, but just _sometimes_. You need to make sure that this is really fun for you.
3. Take a few moments to think what types of applications you would like to develop in future. I had few friends that worked in .net while wanted to develop computer/mobile games, so they just spent several years doing not what they really wanted to do. Again, be as honest as you can with yourself.
4. Try to be a part of the community. Stackoverflow, twitter and good blogs – tools that can help you. There are a lot of stuff like this, for instance http://stackoverflow.com/questions/380819/common-programming-mistakes-for-net-developers-to-avoid
5. Share your work, push your code on GitHub or other site and ask experienced guys for the code review.
WoW! Restuta, thank you very much for this great addition :)
Well, as you mentioned TopCoder's algorithm contests I think it is worth to mention TopCoder's component development contests as well. Doing them you can learn how to write good and efficient code, learn some design patterns, learn how to write good unit tests with excellent coverage and so on. The main point there that you can get reviews from three experienced developers of you component. And BTW you can earn money for this if you do well, but the gained experience there is definitely more valuable.