please tell me the roles, skills, responsibilties of a programmer???
thank you!!!!
About Programmer
Re:About Programmer
The two most important "skills" are probably
1) Problem solving: Programming is all about figuring out how to model some not-so-well specified abstract problem with a finite set of basic operations.
2) Learning: You need to learn new stuff all the time, and it helps if you are fast in learning, because you have to learn a lot of stuff.
That said, programmers basic job is to create programs, usually by writing "code" in some "programming language", and fix "bugs" in said programs when they don't work as expected.
The code-writing part is usually quite trivial, just like speaking is quite trivial, once you know the language, so the hard part is really figuring out what to "say". You need to make it exact enough for dump machines to mindlessly obey. That mostly involves problem solving very similar to applied mathematics.
The other half is when you have written something, and it doesn't work, you have to figure out why it doesn't work and correct the errors you made. This usually involves the same kind of problem solving, only in the reverse direction (you know what happened, and need to figure out why).
That said, from these basic aspect real programmers also need some management skills (if not for managing people, at least for managing the source code and bugs).
To help your problem solving and to make the management part take less time (leaving more for the problem solving) you also want to constantly learn as much as you can. Sometimes you have to learn something, say a new language, or how to use a program/library/API, and sometimes it simply makes your life a lot of easier to know different programming styles (say functional programming, monads, object-oriented, multi-threaded, distributed... could go on forever).
1) Problem solving: Programming is all about figuring out how to model some not-so-well specified abstract problem with a finite set of basic operations.
2) Learning: You need to learn new stuff all the time, and it helps if you are fast in learning, because you have to learn a lot of stuff.
That said, programmers basic job is to create programs, usually by writing "code" in some "programming language", and fix "bugs" in said programs when they don't work as expected.
The code-writing part is usually quite trivial, just like speaking is quite trivial, once you know the language, so the hard part is really figuring out what to "say". You need to make it exact enough for dump machines to mindlessly obey. That mostly involves problem solving very similar to applied mathematics.
The other half is when you have written something, and it doesn't work, you have to figure out why it doesn't work and correct the errors you made. This usually involves the same kind of problem solving, only in the reverse direction (you know what happened, and need to figure out why).
That said, from these basic aspect real programmers also need some management skills (if not for managing people, at least for managing the source code and bugs).
To help your problem solving and to make the management part take less time (leaving more for the problem solving) you also want to constantly learn as much as you can. Sometimes you have to learn something, say a new language, or how to use a program/library/API, and sometimes it simply makes your life a lot of easier to know different programming styles (say functional programming, monads, object-oriented, multi-threaded, distributed... could go on forever).
Re:About Programmer
Imagination.
Imagination is what provides a good programmer with the ability to make intuitive decisions when solving a difficult problem. Without a good imagination you're stuck trying to approach programming as just science, when in truth it's more than 50% art.
Imagination is what provides a good programmer with the ability to make intuitive decisions when solving a difficult problem. Without a good imagination you're stuck trying to approach programming as just science, when in truth it's more than 50% art.
Re:About Programmer
While Mystran's desription is excellent, especeially regarding professional programming, it misses some key factors.
First is that most professional programmers have to wear several hats, especially in a small company; it is not uncommon for a programmer to have to cover aspects of systems administration, network administration, quality assurance, hardware maintanence, and even help desk or tech support. Even in larger firms, where jobs are more specialized, knowing the details of these other jobs is often critical. Conversely, many other jobs - system administration, QA testing - require a certain amount of skill at script programming.
Second, amateur and pro bono programming is at least as important as professional programming is. Many programmers, students and veterans alike, contribute to open source projects such as Linux for the good of the community, as well as for recognition from their peers. Also, programmers tend to heavily automate and customize their own computers, which often requires scripting and toolbuilding.
But the most important thig to understand is that programming is not so much a career as a state of mind. It has been rightfully said that a someone can be a programmer without ever having used a computer, just because of their mindset. So, undestanding the psychology of programming is essential.
Larry Wall, the original designer of Perl, is known for saying that the chief virtues of a programmer are laziness, impatience, and hubris. He is quick to note, however, that there are true and false forms of each. For example, he asserts that 'true laziness' is expressed not as an unwillingness to work, but by working hard now to automate away tasks so that you never have to do them again. True impatience is an unwillingness to accept inadequate systems and tools, and the ability to work at fixing those problems rather than giving up on them. True hubris, finally, is the refusal to accept commonly assumed limits of what can and cannot be done, even if it means setting your ego aside to do it.
For more details, see this quote, which originally appeared in the Camel book's chapter on Software Design.
For other insights into the peculiar psychology of programming, you might want to look at The Jargon File and The Art of Unix Programming. However, you should be awre that ESR is very opinionated (even prejudiced), and you will want to take his pontificating with a some skepticism. If you can find a copy of it, then The Tao of Programming is also excellent, if rather old, and quite humorous as well if you can get the jokes.
You could also read the archives of the online comic strip User Friendly.
Finally, the best way to understand programmers is to learn a programming language, read as many programs as you can, and write some programs of you own.
For more specific advice, see the Advice for novice programmers thread of this very forum. For further resources, see the Book Thread in the OS forum, though you should be aware that many of the books listed there are specific to the topic of operating systems and low-level hardware programming.
First is that most professional programmers have to wear several hats, especially in a small company; it is not uncommon for a programmer to have to cover aspects of systems administration, network administration, quality assurance, hardware maintanence, and even help desk or tech support. Even in larger firms, where jobs are more specialized, knowing the details of these other jobs is often critical. Conversely, many other jobs - system administration, QA testing - require a certain amount of skill at script programming.
Second, amateur and pro bono programming is at least as important as professional programming is. Many programmers, students and veterans alike, contribute to open source projects such as Linux for the good of the community, as well as for recognition from their peers. Also, programmers tend to heavily automate and customize their own computers, which often requires scripting and toolbuilding.
But the most important thig to understand is that programming is not so much a career as a state of mind. It has been rightfully said that a someone can be a programmer without ever having used a computer, just because of their mindset. So, undestanding the psychology of programming is essential.
Larry Wall, the original designer of Perl, is known for saying that the chief virtues of a programmer are laziness, impatience, and hubris. He is quick to note, however, that there are true and false forms of each. For example, he asserts that 'true laziness' is expressed not as an unwillingness to work, but by working hard now to automate away tasks so that you never have to do them again. True impatience is an unwillingness to accept inadequate systems and tools, and the ability to work at fixing those problems rather than giving up on them. True hubris, finally, is the refusal to accept commonly assumed limits of what can and cannot be done, even if it means setting your ego aside to do it.
For more details, see this quote, which originally appeared in the Camel book's chapter on Software Design.
For other insights into the peculiar psychology of programming, you might want to look at The Jargon File and The Art of Unix Programming. However, you should be awre that ESR is very opinionated (even prejudiced), and you will want to take his pontificating with a some skepticism. If you can find a copy of it, then The Tao of Programming is also excellent, if rather old, and quite humorous as well if you can get the jokes.
You could also read the archives of the online comic strip User Friendly.
Finally, the best way to understand programmers is to learn a programming language, read as many programs as you can, and write some programs of you own.
For more specific advice, see the Advice for novice programmers thread of this very forum. For further resources, see the Book Thread in the OS forum, though you should be aware that many of the books listed there are specific to the topic of operating systems and low-level hardware programming.
Re:About Programmer
Ok, most of what you added, is more about being a "hacker" than purely being a programmer (call hackers outside law "crackers"). I was specifically trying to avoid adding "hacker" stuff to my description, as I was trying to keep it as a description of the main role of being "a programmer".Schol-R-LEA wrote: While Mystran's desription is excellent, especeially regarding professional programming, it misses some key factors.
But I have to agree with you. Most (good) programmers are just as much "hackers" as "programmers". And indeed that involves automating every task you need to do more than twice, or involves any repetitive commands. Indeed that often involves administration as well, although you SHOULD know administration if you are serious about programming at all, so you can test your stuff with every meaningful configuration of every possible software (and hardware) someone might try to combine your stuff with. And indeed it involves doing stuff "as well as you can, but not better." [and everything else Schol-R-LEA said]
But I'd still claim that whether you want to be a hacker or just a professional programmer, in the end it's just "solving problems", "thinking openly" (thanks Curufir) and finally "learning everything about pretty much everything, involving computers or not".