Possible Duplicate:
I'm graduating with a Computer Science degree but I don't feel like I know how to program

I finished University around 4 years ago double degree in Software Eng/Comp Sci. Got my first job at a startup in my final year, was with them for 2.5 years then started my own business.

So far everything is going great, lots of clients and stead work etc, but coming right out of uni and into a start up I never had any form or senior software engineer guiding my work or suggesting improvements etc...

Whats the best way for me to improve & learn more? Books? MS Exams? Other?

I develop in C#, ASP.NET/MVC.

Update The problem isn't really with releasing products, I've released quite a few which are up and running with customers happy. It's more with quality of code, best practices, how do I know something I am code is correct, it may work but there may be ways of coding it much more efficiently or by adhering to some kind of standard

Cheers for any responses!



5 Answers 5


Here are a couple suggestions:

Co-Working: As a developer, co-working has been awesome for me. It's essentially rented, shared, open office space (here's my local one: http://sparkplaza.com/) where you could work. You'll find a LOT of developers that are freelance work at places like this. It's a good way if you're working on your own to be able to work in the same office with others. Impromptu code reviews are not uncommon, and the community there can help you talk out ideas and architectures and code.

StackOverflow: Answering questions for other people, or even looking at questions and answers will give you new perspectives on things and help you broaden what you're exposed to.

Contribute to a popular open source project - Having a few open source projects my self, and starting most of them, you don't get a lot of feedback starting your own project (unless it gets amazing traction). You should provide a bug fix or enhancement to an existing project and one that you aren't the head of and need approval for a check-in. This will force feedback from the project owners, who can say "great job!" or "this bit of code right here can be better, I suggest this.."

  • +1 for suggesting shared office space with other developers.
    – Craige
    Nov 11, 2011 at 16:20
  • There is a shared office space opening up in Perth soon so I might give that a go.
    – bExplosion
    Nov 11, 2011 at 16:35

Don't wait for senior software engineer guiding you. They are either not good or they are very busy! (if they are good).

If you genuinely want to learn something, i suggest you take up a hobby project on your own - and put it open source!

You will gain following:

  1. With freedom and interest - you will pick a subject to learn about something.
  2. As you try to put a whole product together - you will inevitably learn the real significance on how design and architecture work.
  3. As you collaborate with people - you will get people's feed back on what is really important.
  4. If you happen to built few iteration of work and release code- you will learn principles of software development process.

Of course, other rewards are all out there -if your product is some good.


Given your comment, i felt i have been a bit biased. But if you have been through the process of making a whole product - than it is time look something bigger and deeper. I guess, now i knew what you are asking for.

I would suggest following area to master - and leave upto you how you plan/implement your learning.

  1. Getting to know more about broader perspective in Software Architecture - i know so many people would recommend that and i am not going to over emphasis. But i think the point i am making is to look at Architect role to visualize how things evolve when product grows big. Lots of literature are out there pick anything to start with- but this is very crucial step that will transform you.

  2. Getting to know many other technology aspects - have you been curious about how - OS kernel, Database, Java or .NET run time, File systems, Web servers, browsers, distributed systems, - the daily stuff we use- how does it work from inside? How is their architecture? what are the key design criteria.

  3. Learn about technology adoption process. Many people will differ on individual opinions if you ask why would JAVA or .NET is better and why did CORBA never achieved what web-services did, and whether Android will overshadow (or kill) iPhone upcoming generations. As engineers who are so busy thinking how stuff works - we often need to get above and see deeply as to why certain things work in life and why not.

All of these would need you to pick specific topics of your interest and get little more than web crawling to get down to reading books or go deep in the subject.

I know i have give you rather broad answers than specific tips/pointers - but that's precisely the idea.

  • + The only way I'll get a senior coder to help me is when I have enough profits to hire one :)
    – bExplosion
    Nov 11, 2011 at 16:30
  • @bExplosion you don't need to get a senior coder! you need to become one. On your own. Nov 11, 2011 at 16:48
  • Yep that's what I'm hoping too :)
    – bExplosion
    Nov 11, 2011 at 16:49
  • I really liked the part of the answer in 2. that addresses things you are curious about. I really got interested in the jvm and it looked like a waste of study time pursuing it. Then when I needed to fix threading issues in other peoples code it paid me back for that time many times over!
    – user39741
    Nov 12, 2011 at 23:30

You are already doing things right. You are coding, have steady work, and have happy customers.

  1. I would suggest to continue with what you are doing right.

  2. I would add in reviewing Open Source code. Currently what I've done is import the Spring Framework into my ide and I look at that for example. I also do open source code searches with Koders http://www.koders.com/

  3. I also would network with other developers at the local user groups for what you are coding in or would like to work with in the future.

Try to work with a variety of developers on projects that you take seriously and attempt to learn from their strengths and recognize their weaknesses. It doesn't matter if they are better or worse than you, teaching is also a great way to learn.


Don't underestimate the learning experience involved in guiding others. You have enough experience that there is a whole bunch of developers out there with less knowledge and less experience. Guiding others can be very challenging to your own knowledge and practices as it requires you to verbalize to others why you do things a certain way.

I also agree with what others have mentioned here, take up another language with a significant different paradigm. Personally, Erlang has worked very well for me to extend my own thinking around programming and there are a lot of takeaways from it that can be applied in an imperative language.

Not the answer you're looking for? Browse other questions tagged or ask your own question.