I'm working on becoming a self-taught programmer. I've read a little bit through a lot of languages and I decided to start with Java and have been using it for several months now. I didn't have much of a problem since most my programs are relatively simple, or games that don't take much planing. That is until my last project I challenged myself with, making a client/server chat applications with a GUI. With only the idea in my head on how sockets worked and my newly learned syntax I started at it. Before I knew it I ended up with a jumbled mess of program that I was finding VERY difficult to work with and eventually I was just so ridiculous I couldn't get simple things to work and I had to delete everything and now I'm starting over. So I took it that I need some better practices.

Now for the questions. As someone who is self-taught I'm bound to develop several bad habits, and I do virtually zero planing before writing a program aside from the idea in my head, so:

  1. What are some good ways I might start developing better programming habits?
  2. When planning a program, are there any good methods of doing so?
  3. Besides experience, what else is it that I might need before trying to actually take on a big real-world project as a programmer? Like one for a job. (How many languages should I know, what kind of problems should I be able to handle, that kind of thing. )

As Ryathal already mentioned, practice and never stop practicing. Some of the best experience that teaches you skills and redefines how you approach software development are failures. Spectacular failures burn those lessons into your skull.

In addition to straight practice, few more things you could be doing:

  • Keep reading books. And not just on programming languages themselves, but also on other aspects of software development. Uncle Bob (Robert C. Martin) has a couple which are very worth reading: "Clean Code", "Agile Practices, Patterns and Principles". Also Pragmatic Programmer is a very highly recommended read.

  • Surround yourself with people who are better than you at programming. Finding someone who can review your code and who you can bounce ideas of would be very helpful for you. Use this site, as well as SO and CodeReview stackexchange as much as you can, but local person would obviously be better. TIP: Free food (and beer) goes a long way with many programmers if you are looking for their help/advice. If you don't have any friends or friends of friends, you could try checking out some local user groups for specific technologies in your area.

  • Btw, I'm a huge proponent of TDD and one of the key people who is trying to promote its wider adoption at where I work. However, I've seen much more experienced, professional programmers fail miserably while doing what they thought was TDD. I think until you have more experience in software design, TDD will only triple or quadruple the amount of code you need to maintain, and all that code will morph into a nightmare that will make you hate the project you are working on. For now just focus on software itself. Don't worry if it's not automagically testable, most of it will probably end up being throw-away in any case.

|improve this answer|||||
  • Wow, thanks! Those sound like some really useful tips and I'll be sure to read those books. Right now I'm reading Code Complete. Thanks DXM – cgasser May 16 '12 at 6:42
  • Overall, I liked Code Complete, but I did find it to be rather dry at times which might make you discouraged. IMO, Clean Code is a much better read. Rather funny/informative presentation from the author: infoq.com/presentations/Robert-C.-Martin-Bad-Code – DXM May 16 '12 at 6:51
  1. Program more, go back and look at your old code and try to understand what its doing and how its doing it, and program more.
  2. There are hundreds may thousands of different ideas on how to develop software wikipedia has a good list. Agile and TDD are the most current buzz, but by no means the best.
  3. More experience :) You might want to start with something small and then just add more and more features to that project, like make a website, add the ability to login as different users, add a way to send messages or a real time chat, add a small game, etc. What you need to know depends on the job you want, there are plenty of questions here that give more detail if you look by type.
|improve this answer|||||
  • Thanks for the answer. I like your suggestion of starting something small and growing on it, I'll have to do that. :) – cgasser May 15 '12 at 21:39

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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