I'm a junior developer at a company that has asked me to establish academic goals for the near future. I didn't realize how hard of a question this was until I could only come up with one answer, off the top of my head:

Learn more Design Patterns

What subjects have you learned, after you finished school, that have helped you significantly?

  • 1
    What technology are you working with? Are there advanced topics specific to your on-the-job tech that you could delve deeper into? May 25, 2011 at 15:05
  • I'm a general tools guy for the department. So if they need a website, Java lib, or even something deployed on a server, they add it to my todo list. A tad overwhelming, actually. haha. May 25, 2011 at 15:11
  • learn how to make coffee and avoid politics ;-) May 25, 2011 at 18:20
  • What are your current strengths and weaknesses?
    – user1249
    May 26, 2011 at 6:12

9 Answers 9


The items that have helped me most significantly (along with references to texts) are:

  • Domain Driven Design ... Has made a huge difference, since for most software projects the primary focus should be on the domain and domain logic and properly understanding the domain. How to translate the domain into code is the secret for avoiding the big ball of mud.
  • Test Driven Development and Unit Testing ... Not just writing tests, but writing test properly has made an enormous difference. I can no longer imagine writing code without a proper set of unit tests.
  • Refactoring ... fundamental tools for how to write and change code.
  • 1
    I was thinking of pointing out unit tests as the next thing I'm planning to learn about. I don't currently use unit tests but people keep raving about them.
    – jhocking
    May 25, 2011 at 16:12
  • As mentioned above ... I don't know how I wrote code previously without them :) May 26, 2011 at 1:28
  • even without unit testing, most programmers do some kind of testing such as smoke test after the code change and before they commit the code.
    – rwong
    May 26, 2011 at 6:30
  • Good point ... just I find unit testing to be such a more efficient and satisfying means of doing that testing. Jun 2, 2011 at 0:59

If you don't know them already:

  • Learn software engineering principles (e.g. the SOLID principles)
  • Learn how to unit test
  • Why the downvote? Proper engineering principles and testing (less so testing, I admit) are important topics for a junior to learn if they hope to improve. May 25, 2011 at 15:29

I agree with most of everything listed above, but wanted to include something I wish more developers regardless of their level knew. Know your tools.

Watching some of my developers is painful as they take the most difficult way to get things done. Learn the ins and outs of your various IDEs or command line utils. While learning all of the stuff already mentioned will make you a better developer, learning the tools will make you more productive.


The biggest ones for me was a thorough review of the following topics:

  1. Data Structures
  2. Algorithms
  3. Parsing and Compiling (you would never guess how often this can crop up).
  4. Distributed Computing

For me, it was more practical than academic: XML/XSL, which was never really covered in as much depth as was necessary in school.

Also good to know if you don't already know is databases and SQL. If you do have experience in this area - go deeper (you can always go deeper) into topics like data warehousing and analytics. General (not specific to any particular system) data modelling is also a good skill. Of course, these are hard to work on if there's no basis for these skills in your workplace (but it's usually possible to find something, even if a bit contrived).

  • There is quite a leap from XML to XSL.
    – user1249
    May 26, 2011 at 6:09
  • @Thorbjørn Ravn Andersen: True, I needed to improve skills for both at the same time for a specific project, though I know they don't have to go together. May 26, 2011 at 13:58

Communication skills is an area that needs work almost always.

You need to understand how to effectively design normalized databases and how to write efficient queries. Daabase do not refactor as easily as other code and you need to be in the habit of getting it close to right from the beginning. No one should be allowed to touch a databse without a thorough understnding of joins and how to do things in sets rather than row-by-row. No one should be writing code for a database that is large and under much performance stress without knowing how to write high performance queries and what things to avoid doing (Cursors, correlated sub-queries, etc.) I could easily come up with several hundred training topics on databases alone.

How to effectively do a code review is another skill many people don't have.

Testing - unit testing, writing tests first, etc. How to translate requirements into tests.

I've alawys found it helpful to develop training topics on mistakes that I, as a senior person, see happening frequently when I code review, especially when more than one person makes them. So ask your seniors what mistakes they frequently see juniors making. Those are critical training topics.


This is a terrific opportunity. Your employer wants you to grow so they can promote you.

Get an course catalog from the best school in your area. Surely you will find something that is both interesting and related to your work. If you don't, then change professions.


Company specific technologies / internal platforms etc. I am surprised nobody mentioned this - It is very hard to pick them up/master them around a deadline, so planning helps.

And yeah - if you have not used a source control system, git.


Learn how to be most resourceful any place, any time.

For example, a software engineer would know to pick the best design pattern for the task at hand.

If you are using Unix or Linux, learn and master vi, sed, awk, regex, perl/python, shell scripting, etc, enough to be able to automate as much of the repetitive tasks as possible. If you use an IDE, learn all there is about it. This will be boring and off-putting to begin with. But you'd see how powerful these tools are when those who have mastered them use them to delegate most of their mundane tasks to the computer.

Touch typing/typing closer to the speed of thought can be very useful. If possible, learn Colemak or Dvorak after some investigation into both, to suit your needs. Both are known to cause less strain on the hands and cause tremendous speed gains.

Design patterns, as you suggest, is an excellent topic to learn. While design patterns are heavily used in object oriented programming, the principles laid out in Code Complete are said to be useful to their readers in who work in other programming paradigms as well.

Also, The Architecture of Open Source Applications is an excellent book and freely available on the web. This book aims to show you the architectures of reputed open source software and critique the architectures. Much like what an architecture student would go through at university, says the book.

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