I am self-taughting myself.
Unless your name is Charles Babbage, we are all gleaning off other peoples work on the computer. I feel that programming is more an art form than a science, putting it alongside such things as music or martial arts. You can work to be very, very good, but it is quite impossible to be the best.
Someday I will be thrilled to reach moderately decent.
I realise that programming is often practiced as if it is an art or craft, but that sort of approach breaks down quite quickly as the program becomes larger, more complex, or effects of its failure become more critical. Given a choice, if someone you cared about needed a pacemaker, would you want that pacemaker to be controlled by software developed using an arty/crafty approach or a technically rigorous approach?
One of the key considerations in developing quality software is a technically rigorous approach. Even to develop novel things - it is necessary to map novel ideas into a form that a computer (ignorant beast that it is) can reliably execute to deliver effects that you intend. That requires technical precision.
I am not, in any way, suggesting that nothing in the world should be produced as an art or craft. But software is not one of them.
Incidentally, as a practitioner of a martial art, I also disagree that martial arts are more art than science. The fact that well executed strikes, blocks, forms, and techniques can look like a dance relies on technical precision. Particularly at higher levels of expertise (dan ranks, etc).
A similar observation is true for music: truly beautiful music has a technical precision as well as being artistically beautiful.
Unless your name is Charles Babbage, we are all gleaning off other peoples work on the computer.[/quote]
Even if your name is Charles Babbage, you would still have built upon preliminary work.
Technical precision can be part of mastery of a craft. Deciding between equally viable (at the point in time) design choices could be considered an art. Besides, even music can require technical precision, so...Quote:
Originally Posted by grumpy
I think that "programming is an art/craft" versus "programming is a science" just creates false dichotomies. Perhaps we could say that programming is engineering :p
I don't see a problem with the notion of "self-taught" because we are taught or teach ourselves what we know through the process of learning. Any disinterest in learning and teaching (first or third person) has no value. I chose to educate myself through a university not just in programming a language but computer science altogether. In the end, I taught myself more than my education could ever have and university instead proved to be a demonstration that I can learn.
I will not sub-thread into the merits of education but whether formally educated or "self-taught", the only things that matters is one's desire to learn and, if able to learn c++, wonderful.
They lose the fact that great artists or craftsmen are also often great on the technicalities associated with their art or craft. Look at the work by da Vinci - beautiful, creative, imaginative, and executed with stunning technical precision.
I view engineering and science as overlapping disciplines, and each would lose value without the other. Science is a discipline about building and organising knowledge in order to explain anything in the universe and make testable predictions. Engineering is a discipline of applying knowledge to design, build, and maintain technologies, structures, devices, machines, systems, materials, or processes for some purpose. Science and engineering are overlapping disciplines - and they affect, are affected by, or overlap with other disciplines (economics, arts, crafts, humanities ....).
However, get into a discussion with an accountant about the need to shortcut engineering process to save costs, with a sales manager about the need to deliver a product to a schedule even if it is not ready, or with senior manager (or politician) who insists on cancelling a project because of political sensitivities, and you learn experts or practitioners in one discipline often lose sight of the importance of other disciplines. It is human nature.
I don't really know whether I'm 'self-taught' since I learned mostly from reading other peoples code, reading books/standards on programming and programming languages, writing code, and even discussing programming with others. I tried a few kinds of formal classes earlier on but they all seemed to teach crap. I'd say you learn the most from reading well-written code and good references, and avoiding the bad ones as much as you can.
Also, learning languages isn't all there is to programming. It's fairly easy to learn a language, but learning to use it well is another story. Try learning a few languages that use different paradigms over a long period of time. I spent a lot of time learning the procedural paradigm with C, then when I got bored with that I moved on to learning the functional paradigm with Scheme. Now I'm bored with both so I'm learning Prolog.
for my part i see a nice piece of code on the screen as a thing of beauty - the fact that same series of text acheives a technical goal does not make it any less pleasing artistically to me. A martial art may be called scientific - wing chun is often cited as so - but then with a martial art being something that is followed throughout life (ideally) then it becomes more of a striving for something more ephemeral than mere function - to the practicioner at least. But then i have known very eminent practicioners that completely dismiss the 'artistic trappings ' and 'kowtowing' or the 'art' certainly from one wing chun master i know and are outwardly only interested in the output - knocking people out - But they are still following that pursuit of perfection in technique and delivery, whether they like / realise it or not. - not many young boxers think about how subtle or sweet their ringcraft is - they just want to hit hard, but older ones / fans will wax lyrical.
You are comparing an "act" with a "thing". If you replace "programming" with "code" you will see that this is not the case, not the case at all. If you also replace music with playing a music somebody else composed, you will see again that technique is the most important thing. I think that is what grumpy had in mind. A piece of code which is the end result of programming is evaluated purely how the machine can execute it. Nothing else. Music is purely evaluated on how beautiful it is.Quote:
Originally Posted by Incantrix
I am not saying code cannot be beautiful as writing in general can be. But that is like an added bonus. It cannot be compared to music where that its main purpose.
For martial arts I don't think science or art is the main form in general. They have much more to do with reflexes and body precision than with imagination. Martial arts have unexpectedly a great artistic part, they are not just two people beating each other up, but fundamentally that part I believe cannot be compared with music.
That being said, there's no "how long" - learning to program is not a process that ends. Learning the language is the first step, not the final goal. Learning a programming language is to being a good programmer what learning a natural language is to being a good author. Every author of course must first begin by learning the language, but that's only the beginning of their journey - everyone on this forum can read and write English but we're not all great novelists.
I've been programming for over 20 years (and have used about 15 languages over that time; I use 4 right now). I'm still getting better at what I do, and I'm still learning new things and refining my existing skills.
Learning programming only ends when you decide you're not going to try to get any better.
Previous to Babbage, however, there was nothing but ideas. Haha, if you are going there then there is no first of anything that can be recorded.
I like to give credit to those who are at least perceived to be the creator of.
Pointing out one example, DaVinci, I'll point out another. Stevie Ray Vaughn could not even read sheet music, never played a song the same way twice. Do you think his work was lacking?Quote:
Indeed. The problem is a lot of people describe an activity as being an art or craft in order to excuse a lack of technical rigour.
Since my comment struck up an unintended discussion I will leave this statement to everyone.
If everything is merely technical, then there can be no such thing as God-given talent, to which I strongly disagree. Have you never tried to do something and found out that you just can not improve at it? I can not, as an example, redo the Sistine chapel, I cannot beat Tiger Woods (in his prime) at golf, I can not run faster than Usain Bolt, I could not spar and win vs Bruce Lee, cannot out Theory Einstein.... et al. People here are arguing that they 'could' do these things, simply by learning them.
I had no physical teacher so I suppose I can say I was "self-taught" but really unless you literally pick out a compiler and start typing random gibberish, you learn by other people's teachings (tutorials, books, etc.) The only difference is the words that a teacher would say are written out for you, or recorded and spoke back to you. (Hopefully written in a good book.)
Second, "talent" is subjective. What you consider talent, I may not, and vice versa.
Yes, some people have a natural aptitude that others do not, and learning builds on that. Michelangelo's talent was not so innate, and he was not precocious enough, that he started painting the ceiling while he was an infant. He developed skills, worked, and was sponsored. In short, he learned. A large part of the success of Tiger Woods and Usain Bolt is hard work, training, and honing their skills and technique. Bruce Lee was trained by martial artists, and trained others. Einstein learned from other theoreticians, and built on their work.
EDIT: And I have yet to encounter anyone who has an innate talent for anything to do with software development.
And how would you know either way? - That is the point though isn't it - There would be no way of identifying somebody with a 'natural' talent for dev. Personally i think that is down to the fact that it is a combination of abilities that produces good coders. I feel certain that it must be quantifiable somehow though - what about the early days games writers? solo efforts in assembly code - Matthew smith et alQuote:
And I have yet to encounter anyone who has an innate talent for anything to do with software development.
I wouldn't agree that solo writers would be representative of a "gift" for software development. I've seen too many solo writers who are absolutely shocking in a large team environment, where the software design is too large and detailed to be kept track of by a single human, or who face a massive transition when moving to such an environment. Those who actually do make the transition well have one common attribute: a work ethic and capacity for hard work (which are great attributes, but hardly things that define a gift in software development). Part of that is non-technical (eg communication with people in a team) but there is also a repertoire of technical skills that solo developers do not need, but developers in a large team setting do. The reverse is also true - people used to developing large software in a team environment often have trouble keeping track of details that a solo developer takes for granted.