Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

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?

share|improve this question

closed as off-topic by Jim G., MichaelT, gnat, GlenH7, Telastyn Jul 7 at 14:15

This question appears to be off-topic. The users who voted to close gave this specific reason:

  • "Questions seeking career or education advice are off topic on Programmers. They are only meaningful to the asker and do not generate lasting value for the broader programming community. Furthermore, in most cases, any answer is going to be a subjective opinion that may not take into account all the nuances of a (your) particular circumstance." – Jim G., MichaelT, gnat, GlenH7, Telastyn
If this question can be reworded to fit the rules in the help center, please edit the question.

1  
What technology are you working with? Are there advanced topics specific to your on-the-job tech that you could delve deeper into? –  FrustratedWithFormsDesigner May 25 '11 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. –  MYou May 25 '11 at 15:11
    
learn how to make coffee and avoid politics ;-) –  Steven A. Lowe May 25 '11 at 18:20
    
What are your current strengths and weaknesses? –  user1249 May 26 '11 at 6:12
add comment

9 Answers

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.

share|improve this answer
add comment

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.

share|improve this answer
add comment

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.

share|improve this answer
add comment

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.
share|improve this answer
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 '11 at 16:12
    
As mentioned above ... I don't know how I wrote code previously without them :) –  Dakotah North May 26 '11 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 '11 at 6:30
    
Good point ... just I find unit testing to be such a more efficient and satisfying means of doing that testing. –  Dakotah North Jun 2 '11 at 0:59
add comment

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.

share|improve this answer
add comment

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.

share|improve this answer
add comment

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).

share|improve this answer
    
There is quite a leap from XML to XSL. –  user1249 May 26 '11 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. –  FrustratedWithFormsDesigner May 26 '11 at 13:58
add comment

If you don't know them already:

  • Learn software engineering principles (e.g. the SOLID principles)
  • Learn how to unit test
share|improve this answer
    
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. –  Wayne M May 25 '11 at 15:29
add comment

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
share|improve this answer
add comment

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