Possible Duplicates:
What skills do you think are essential to becoming a jedi programmer?
What fundamental skills are needed for programming?

What tasks should all programmers be able to do in order to call themselves semi-proficient in a language / platform?

I'm talking about concrete examples eg. File IO, threading, GUI etc etc.


You may be interested in the Programmer Competency Matrix. This lists various programming (and software engineering) tasks by (a) subject area, and (b) competency level.


Avoid doing as much repeated work as possible. We're lazy and proud of it!


Document their code well.


Write self-documenting, intuitive code.


MORE: http://c2.com/cgi/wiki?SelfDocumentingCode

AND: Write tests!


Provide estimates of time and effort that are within an order of magnitude of being correct. And that's not just snark; part of being proficient means having a reasonably good idea of how much work is required to accomplish a specific task.


Here's the most important I can think of right off the top of my head, there's probably heaps more:

  • Be able to analyze existing code and diagnose issues
  • Be able to look at an application design and expose design flaws
  • Be able to assist with finding solutions for known bugs
  • Be able to think abstractly
  • Be able to understand n-tier abstraction
  • Be able to query a database using some flavour of SQL (T-SQL, PL*SQL for example)
  • Be able to read/write files from the disk
  • Be able to understand and handle caching systems
  • Be able to write simple command line utilities
  • Be able to write basic GUI applications and understand event driven models
  • Be able to recurse through the file structure on disk and open/close/read files
  • Be able to understand and interpret algorithms
  • Be able to design algorithms
  • Be able to understand current programming techniques
  • Be able to data model
  • Have as critical an eye for your own work as you do for everyone elses
  • Get past your ego and work for the good of the project and your team
  • Have an open mind, your idea may not always be the best idea

Probably have a sense of humour and not take themselves too seriously would work well for a team environment.


A developer should know how to debug in the platform he/she use.


In an employer's eyes, whatever tasks are required for the job.

In an employee's eyes, whatever tasks are required for their job + tasks they are interested in/curious about/want to progress in.

  • Able to use google to find examples or existing code. (Software is probably the industry with the most inventors of the same things.)
  • know Stackoverflow! :-)
  • Know that saying "this code is terrible... who wrote it, it's the worst code I've ever seen" is not constructive feedback;
  • Realize that everyone makes mistakes;
  • Realize that the client doesn't always know what they want;
  • Be open to change (requirements, technologies, etc); and
  • Realize that we all write bad code from time to time.

Swapping the content of two variables without using a third variable :)


I would not say using a specific library (GUI, threading, File IO) is a good measure of language proficiency. A web developer may never have written a desktop GUI, but that says nothing of their proficiency in the language.

I'd say being proficient in a language means you can reasonably quickly find a solution to a small, but complex problem; that is, you should know what the language can and cannot do, and work through the problem within these constraints and exploit the language's capabilities. For example, if using a closure would provide an elegant solution to a problem in Javascript, and the guy is not using them, they probably don't know Javascript very well. Similarly, if they're using methods as getters/setters (get*/set*) in Python, where using an attribute explicitly or using property() (or @property) makes more sense, then they probably don't know Python very well.