What kind of non-technical training course do you suggest for a programmer? Example could be public speaking course, presentation skill, English, business writing, or anything not related to programming or software engineering itself.
Anything related to communication, like public speaking, would be great. You will be considered a LOT more valuable as a programmer if you are able to communicate well with your team and the stakeholders of the software you build. A lack of communication skills will absolutely stunt your growth in this field.
Graphical Desgin. Try this for a starter: http://net.tutsplus.com/articles/lectures/design-for-developers/.
A piece of software (and any product in general) needs not only to be usable and functional, but also "pretty" to be able to sell, and that is the sad truth.
The biggest problem I've seen with folks coming straight out of college (including myself a few years ago), is that they want to write cool applications no matter if they help the business make money or not. In order to really be a rockstar developer in everyone's eyes you need to be a great developer (for the other developers to notice) and either make or save the company money (for the business people to notice)! When you can do both you set yourself up for not only great career opportunities, but the business people will start to LISTEN to you! Why? Because you provide value. Even startups that write fun applications' primary focus is to eventually create something that is profitable.
Assertiveness Skills - To note here that "Assertion" does NOT in any way relate to "Aggression".
While this comes under the general gamut of "soft skills", I have found this training to be greatly beneficial especially when it comes to programmers.
Atleast in my experience, i have just come across too many programmers who would rather avoid a confrontation with someone about topics which they may even be better informed about due to their nature and this is detrimental to the team overall.
Such a course mainly focuses on people making their point heard and giving them some basic tips about how to ensure that your viewpoints / opinions do not get snowed over just because of some big mouth on the team who may be better than others at putting his point across.
Logic. Algebra. Statistics. Calculus. English. Critical thinking. Physics? Behavioral analysis?
It depends what you want get into, and what you're naturally good at. There are tonnes of courses that will benefit you in some way. Many answers have suggested communication courses, which you seem to already know -- other than that, think long and hard about how you want to apply programming and take the courses that complement your goal.
Typography is an overlooked area that is very important! Understanding typography can help you understand how to make more usable software as well as make it look good! Even if you don't take a class, it is great to read up on and can give you an edge.
Great Typography Books:
Depending on what you mean by "non-technical", I'm voting technical writing skills. Mark Freedman is right to mention (interpersonal) communication skills, but technical writing skills are also important for a developer.
If nothing else, every comment you add to your code is a snippet of technical writing. Also, no matter how good your spoken communication skills, a written explanation of what you understand the requirements be that others can understand is very important - without it, even if the initial spoken communication was perfect, yours and your bosses/customers perceptions of what you're supposed to be doing will inevitably drift in different directions over time.
Personality Testing and Profiling
Understanding personalities, tendencies, and chemistry is important. It can help you understand how to be more productive individually and as a team.
Basic Financial Courses - The category is a bit broad but odds are pretty good that most developers that work for a large company that doesn't produce software as a product is going to have to write some code that preforms financial calculations. Likewise, as you start to move up the career ladder you might be called on to produce basic budgets for your group. Finally, they tend to teach you useful information for your household budgets as well so you know where to invest money for short term gains and long term stability (i.e. for your retirement account).
- Foreign languages!
- I had a course at college called "Computer Science and Humanity" in which we talked about being responsible as a developer (e.g. privacy concerns).
- Business Administration (e.g. accounting, HR) lets you understand your bosses and clients better.
- Electronics makes you understand your tools better.
I'm surprised that no-one mentioned improving English skills.
I am constantly surprised at the number of CV/resumes I get that are almost unreadable.
If you start off as a pure technician it is unlikely that you will end your career using the same skill set. There will come a time when you need to write a report (or lots of reports) that require a lot of words to be put down on paper.
The problem you may encounter is to actually find a good enough course to take.
There are many subjects that a computing professional should know, indeed our profession, like most business consultancy professions, requires a substantial breadth of knowledge across all the domains we encounter and analyse.
However, law is the one I would single out as a necessity.
Our profession is on the front-line of a rapidly changing legal framework, intellectual property is the well known example, but there are all manner of legal issues that crop up day-to-day. Regulatory compliance, valid and invalid contractual clauses, credit law, if you work in e-commerce, data protection.
I think all IT professionals, and certainly senior software engineers should have basic legal training and follow applicable law in their areas. My university had it on the compulsory syllabus for master's students for computing, it comes in handy regularly. The usual riposte is that "the legal department handles that", yes well, they may not be aware an issue created by software exists unless the staff there have sufficient awareness to notify them of it - plus, it is usually the source that has their head on the chopping block.
While I will not dispute the importance of communication skills both written and verbal, if you get the chance to take a course on human-computer interaction, I believe you will find it invaluable. Some of the most difficult problems I see at work usually involve trying to figure out what the user wants when the user doesn't even know themselves. Developing intuitive user interfaces that work well and exactly as the user expects is really hard in my opinion.
- I think you should have a good hobby so better learn to do a sport(an outdoor, so you get exercise as well)
- Learn Music or try writing poetry, proses, scripts for drama(learning those things will improve your creativity which i think is most needed for a programmer or any person)
- Mathematics(Strongly recommended)
- public speaking and communication skills
Some answers here suggest Graphic Design or Typography with the assumption that this will help in creating better GUIs and providing better user experience.
Some Universities actually offer courses in GUI Ergonomics which might be even better for that, although I'm not sure how 'non-technical' you can consider this ;)
It depends on what you want to do with your life, I think. But here are some good general ones:
- Group communications. As a software developer, you'll probably be working in groups for most of your career. Learning about how groups interact and how communication within groups occurs would be beneficial.
- Economics. I would recommend an engineering economy course that covers topics such as present worth and future worth analysis, rates of return, life cycle costs, project decisions, and so on. However, some kind of economy course should be taken, even if it's only microeconomics or macroeconomics.
- Organizational behavior. I took an OB course and it's very much an applied psychology and sociology course, taking psychological and sociological concepts and applying them to how organizations work.
- Technical writing or technical manual writing. Although any kind of writing course would be a good idea, technical writing would not only improve your writing skills, but also help you with the creation of technical documentation, something you might be doing at work.
Any decent quality Work-Life Balance courses, workshops, or even books can be helpful to stress the importance, and remind us (all of us) how important it is in the long run to maintain a balanced life so we don't end up burnt-out, divorced, and suffering from major depressive disorder alone and laid off.
In poor economic times it may be even more important, because of the tremendous pressure to cheat ourselves of this balance for what is typically a false hope of security (if the situation are really that precarious, it will mostly eventually fail anyhow).
Avoid any training or seminars that are too gimmicky, or quick-fix oriented, but simple common-sense oriented balance is the best bet in my opinion.