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.

Looking for well defined explanation that is based on a statistically significant correlation to what "real" world programmers are paid to do as a team and what they are told to learn; not for example, how to be a good cowboy coder, or open source team coder.

To be clear, this is not just "how to learn [insert-language]" - but more along the lines of writing quality code, being able to complete common team based tasks, etc. - and being able to quantify that a programmer has mastered these skills in a standard way.

The closet I am able to think of is "Teach Yourself Programming in Ten Years" by Peter Norvig, or the "Programmer Competency Matrix" by Sijin Joseph, and these may in fact be the answer, but they have been around awhile, and it is possible at this point there is something of more use. What is a "real" education in programming?


BACKGROUND: Increasingly find that there's a disconnect between what academia teaches and what the real world needs. Personally, while I understand academic endeavors on there own have lead to great progress both within the field of programming, and outside of it - I gap a huge gap in what academic education offers, as being of use - and what the real world needs. Ventures like Hungry Academy seemed like a good approach, but given it is now dead, it is unclear how to train more coders faster based on fact-based observations of what works.

share|improve this question

closed as primarily opinion-based by ratchet freak, gnat, Euphoric, MichaelT, Eric King Apr 3 at 16:06

Many good questions generate some degree of opinion based on expert experience, but answers to this question will tend to be almost entirely based on opinions, rather than facts, references, or specific expertise.If this question can be reworded to fit the rules in the help center, please edit the question.

    
The best correlation to why programmers are paid to be programmers is because they've been paid to be programmers before. –  Telastyn Apr 3 at 15:09
    
@Telastyn: Based on that logic, all you need to do to train a programmer is pay them; too funny. –  blunders Apr 3 at 15:12
1  
you didn't ask how to train them, you asked what "real" world programmers are paid to do. –  Telastyn Apr 3 at 15:14
1  
I have feeling even many businesses have no damn idea what real programming is. Especially when they continue throwing cheap college graduates at problems and expecting them to produce high-quality software and fast. –  Euphoric Apr 3 at 15:22
    
@Euphoric: Yes, I know, hence why I referenced Hungry Academy, who was looking to find an answer to the issue of finding programmers for LivingSocial. –  blunders Apr 3 at 15:25

1 Answer 1

This has the potential to end up as a bike shed argument. Nevertheless, what I found are the biggest discrepancies between academia and "the real world" are:

  • Don't expect to make a good living only by knowing the tools. Learn a domain instead, and apply programming to that. To quote this website:

People who can code in the world of technology companies are a dime a dozen and get no respect. People who can code in biology, medicine, government, sociology, physics, history, and mathematics are respected and can do amazing things to advance those disciplines.

Plus, as you said, a good combination of:

  • Learn to review others' code and provide useful feedback. This teaches you to program for humans, not machines. Application: peer reviewing.
  • Mentoring. Having to explain something to somebody makes you realize what you don't know, and quite often you'll get a "a-ha!" moment as well.
  • Learn to estimate. The hard way: make estimates for tasks, write them down and then compare how long it took. Bonus points if you end up learning to use one of the many planning tools like Jira, etc.
  • I consider solid unit and functional testing a given to be a moderately decent programmer, but I'd better add it here before somebody complains.
  • Refactoring. Especially if it's not your project. You'll learn that often things are complicated for other reasons, design being not one of these.
share|improve this answer
    
Interesting; guess the only issue I would pick is that domain knowledge is rarely based on my experience a hard-requirement for most entry level career opportunities - though long-term, I agree that your take is one based on the "real" world. –  blunders Apr 3 at 15:23
1  
You're right, it doesn't apply to 'entry level career'. However, if you enter the programming career and you have solid background in other fields, it will help you if you want to specialize in some field. –  lorenzog Apr 3 at 15:32
    
Guess, though unlikely in my opinion. My experience is that most people in the real world for entry level roles: (1) make random choices, (2) select the first/last option given, (3) there's some social aspect to the choice, that's not based on the real requirements of the problem, (4) or use qualifiers such as "degree in X" or "expertise in X tool/language/etc". In fact, when it comes to domain knowledge, I find most subject-matter-experts in a domain do not really understand the domain, but what they have done in the domain; which clearly are different, yet important differences. –  blunders Apr 3 at 15:38
    
I can tell you one domain that this is true for: many programmers in the field of visual effects are former artists who also knew, or learned, how to program. –  user16764 Apr 3 at 16:52
    
Here's another - physics simulation. Used a lot in videogames. –  lorenzog Apr 3 at 18:26

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