I'm reading accelerated c++ n tryin 2 teach myself c++, although english is not my native language. Is anyone here self taught? Was it hard? How long did it take 2 learn the language?
Printable View
I'm reading accelerated c++ n tryin 2 teach myself c++, although english is not my native language. Is anyone here self taught? Was it hard? How long did it take 2 learn the language?
Learning is a constant process. If you mean, how long did it take to feel comfortable with the language, then I would say, as long as I started writing code and eventually did a project in C++.
Reading books is just not enough for programming. You must code too!
//PS - I am not self taught in C++, but in Java
I'm self-taught in C, C++, Java and Python amongst other languages (I've never been taught computing/programming formally/by anyone else).
As std10093 says, you can't really get to a point where you can say you've "fully learnt" a language, but if you can write useful, self-contained applications in it then that's a good first step. IIRC, I got my first job as a programmer about 2 years after starting to teach myself, but not all of that was very intensive or focused on getting a job in the field.
thx guys, Plz, keep sharing your experiences as self taught programmers.
Everyone who is proficient in a programming language is self-taught to some degree. A formal course, or textbook, can only provide provide a starting point. It takes continual effort to learn from there.
Coding is necessary, but not sufficient, to become proficient. An extraordinary number of people proceed just by hacking and produce code that is neither useful nor understandable. It is also necessary to develop skills in using code for a purpose (i.e. writing code to meet requirements, and evaluating if the requirements have actually been met) and that takes more than just learning the syntax and being able to type code.
I've yet to succeed in fully learning C++.
>_<Quote:
self taught
I hate that phrase.
We are not "self-taught".
We all stand on the shoulders of giants.
We may be "self-directed".
Beyond that, grumpy is right; you'll never get anywhere if you rely solely on a teacher to direct your studies.
The man himself, Bjarne Stroustrup, was corrected in a mailing list here a few months back.Quote:
I've yet to succeed in fully learning C++.
C++ is a not a language that is ever "fully learned".
Honestly though, despite saying "I know $(Language)." for the sake of simplicity, I'm convinced that any such language as to be "fully learned" exists. Well, at least one that is still actively used in the great elsewhere.
Soma
"Self taught" is a common abbreviated description of someone who has undergone self-directed learning, Soma.
I never took a class to learn C or C++. In academia, languages are usually taught along with CS course work, not as subjects in themselves. How long did it take me? I don't consider myself done yet. So... 15 years?
But I don't expect that kind of patience is something you'll be able to summon up, seeing as you're too impatient to spell "you people" correctly.
Yes? And?Quote:
"Self taught" is a common abbreviated description of someone who has undergone self-directed learning, Soma.
*shrug*
I invite you to take more than two seconds for a knee-jerk response and see for yourself how arrogantly a lot of people use the phrase.
If you don't understand my distaste after you see how it is also used, you are an idiot.
I am not saying that such was intended here, but that is why I hate the phrase.
Soma
This is a good theme - I have arguments with a friend regarding being 'self taught' as a musician - becuase he often says that about his cousin who is an outstanding player - The thing is i dont beleive there is any such thing as self taught - I became good at guitar and had i suppose a couple of hours formal lessons - but that really does not count for much - the majority of my learning has come from jamming with mates, being amongst like minded folk, swapping ideas etc etc, And it is exactly the same with programming i feel - You cannot be constantly in an environment where you have lessons - can you?? maybe you can, but there has to be that time where you are just learning anyway, because it is an interest of yours, something you are into - without that interest i dont think you can really progress
I've always felt that a group effort is a solid win.Quote:
the majority of my learning has come from jamming with mates, being amongst like minded folk, swapping ideas etc
[Edit]Quote:
Expressing distaste for some misuse of an expression, in a context where it has yet to be misused, is more a sign of obstreperousness than intelligence.
You know, I just don't think this worth discussing with you anymore.
[/Edit]
Soma
the only formal teaching I received in programming was in 8th grade, when I had one quarter in my science class of BASIC programming on the Apple II. in high school, in the early days of the public internet, and before the standard, I started learning C++, and while I'd now call myself quite proficient, I'm definitely still learning. I also started learning python and C# a couple of years ago, and while I'm not especially proficient in either of those languages, many concepts from C++ transfer over, either as syntax or just good overall practices. to learn all of these languages, I read a lot of books, spent a lot of time in search engines, wrote a lot of code, and most importantly, learned how to use a debugger and read error messages.
OK. To get out of the loop of "self-taught" let me just phrase it as "learn by experience". In this case I would say that no, you shouldn't learn programming only by experience. It is quite more complicated if you want to right quality code and in the end be efficient. In other words, if you want to do it professionally. So there are somethings you should learn, including basic understanding of the architecture of a computer. Not knowing what a cache memory is will make it hard to understand why an array is usually much faster than a linked list on a modern CPU. There are then the best practices, the way the libraries were indented to work, the "donts" and so on.
If the question is should you go to a University to learn then I would say it not required, it mostly just gives you credibility because employers don't have the time to always test you. You can read from books or from other trusted sources. You can definitely learn from this forum and in general from peers. The point is to actually learn and not just write code. So if you search "how to copy a string in C" you probably will end up with some code suggesting the use of strcpy(). And you will be happy. But if you don't have a good understanding it is likely that your code will end up being another door for a hacker. If you know learn what exactly the piece of code does then you know how to handle it properly, which learning might require first learning some more basic stuff
You should also learn it by other people's experience :)Quote:
Originally Posted by C_ntua
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.
Get that idea out of your head, otherwise you will only ever be - at best - a mediocre programmer.
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.
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.
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 agree with you on the false dichotomies.
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.
Don't you think you'd learn English faster if you avoided butchering your words? If you simply replaced 'n', '2', and 'u' with 'and', 'to', and 'you', you wouldn't even be able to tell that it isn't your native language.
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.
I've taught myself many programming languages, and studied others at school or for work; if you're asking specifically about C++, I was self-taught, though I didn't really fully grok OOP until after I took a course in Java, after which my C++ improved considerably. The first one or two languages are the most challenging, others tend to have so many similarities that they are acquirable much faster.
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.)
By some measures, yes. Consistency and repeatability would be examples.
Firstly, I have not suggested anything is "merely technical". There are many ways of looking at anything, not all of them technical. Some overlap.
Second, "talent" is subjective. What you consider talent, I may not, and vice versa.
I think it's the opposite. With sufficient effort to learn, many people can develop an ability or talent that they wouldn't have otherwise had.
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.
If there is no way of identifying someone with a natural talent for something, how can a natural talent for that something be said to exist?
I agree with you that a gift in anything comes down to a set of quantifiable attributes. But if we can't identify those attributes, we can't really expect to describe what the gift entails. Let alone identify - qualitatively or quantitatively - someone with the "gift".
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.
I actually find this discussion amusing, as when I was young, I had argued on the same side you are. God-given talent is not always screamingly apparent, such as a 9 year old Concert Pianist who started playing at the age of 3 (Ethan Bortnick). Also, in you saying Vaughan had no "Consistency and repeatability", then there must be some 'Standard' from the dawn of time that all music is played to - obviously not so. Rather like saying, "When you draw a tree, THIS is how it must be done, if it is to be drawn correctly".
You are acknowledging innate talent, putting yourself into such a meaningful position in life that allows you to know the majority of programmers alive in the world, and implying that you have garnered from said people their backgrounds enough to make a judgement on their skill being solely the product of strict learned behavior.Quote:
And I have yet to encounter anyone who has an innate talent for anything to do with software development.
Wow?
Generally that's because people give up before they improve enough to be satisfied with their own progress. If you've read Gladwell, it takes on average about 10,000 hours of solid practice at an area to really become great in that field. I'd wager good money that Michelangelo practiced painting far more than you did, Tiger Woods practices golf more than you do, etc. What many people call 'talent' is really just the product of lots of dedicated practice.
Aptitude does exist, of course, too. Intelligence is not uniform, for example, and programming is an intellectual discipline. And a lot of programming is learning how to think about the problem you're trying to solve, so people who naturally think along those lines will pick it up faster, while others will need to develop the patterns of thinking that will result in success. However, almost anyone could learn to be a good programmer if they were willing and able to devote years of their life to it.
Not so. You asked if Vaugn's work might be considered lacking. I provided two criteria on which some people might consider it to be lacking. I did not suggest all music is played to a standard.
I have never suggested that there is no such thing as talent. I said I have yet to encounter anyone who has an innate talent for software development.
In any event, looking over your posts, it appears you are trying to obscure the points being made behind some form of condescending religious dogma. So I will cease participating further in this thread.
Then explain the 3yr old who can play the piano without any instruction whatsoever.
I am not arguing that you can learn to be very good. I am saying that there are those who are naturally gifted at certain things, which is separate from learning, and allows them to excel beyond the level of strict learning.
Critera (n) A standard of judgment or criticism; a rule or principle for evaluating or testing something.Quote:
You asked if Vaugn's work might be considered lacking. I provided two criteria on which some people might consider it to be lacking. I did not suggest all music is played to a standard.
You are finally correct in one thing, that there is little point in continuing the thread, this board is not the forum for it. It was not intentional on my part when making the statement I did, that it would branch off.
The Mods should close this thread. :biggrin:
To respond to grumpy's comment about innate talent, I'm not sure I agree that there's no such thing as innate programming talent, but if there is, I don't think it has a huge influence on how effective you are as a programmer. I technically started programming at age 5, so there is some sort of "innate" ability there maybe, but I realized long ago that it doesn't give me that much of an advantage.
If there is any innate talent which is strongly relevant to programming, it is the talent of being able to think clearly. That talent has applications far beyond just software development.
I specifically said 'a natural talent for dev' in relation to this point, software development is what i meant. In sports and music there are lots of examples of people who were just born to do it - people who happen to have falen into the vocation that happens to be the best suited thing to them, snooker players are a great example, alex higgins, stephen hendry, ronnie o sullivan - the latter being absolutely the best example - can beat most players with style, lefthanded, when he is actually a righty. That lad could never have found another thing to do that he could be better at, no way. - its pure natural talent.Quote:
If there is no way of identifying someone with a natural talent for something, how can a natural talent for that something be said to exist?
Regarding this comment i was talking about programmers who did not work in team environments like they are today - I mean those who created top popular work largely alone, I am talking manic miner for exampleQuote:
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
I don't think there's any need for explanation, because I deny that any such person has ever existed (at least if by "play" you aren't counting just mashing piano keys randomly).
Even the biggest-named child prodigies such as Mozart or Beethoven had years of musical instruction from their fathers and others before they did anything on their own, and their earliest works, while skillful for their ages, certainly were far below the standards they would set in their adult careers. I don't think they disprove the 10,000 hour rule at all; they just started their 10,000 hours when they were two or three years old and practiced for many hours every day.
I think I've probably had more formal teaching than a lot of people. At university they did make some attempts to teach us programming (albeit Scheme and Ada 95). In my first couple of years of work I went on a couple of C and C++ training courses. They were really useful -- I didn't learn much from the C one except some good practices, but learned quite a lot on the C++ one.
I don't think I would have found them so useful or interesting if I was actually there to try to learn the language -- as it was I had a reasonable grasp of both languages so I was able to pick up on the interesting bits and fill in some of the blanks in my knowledge.
I've definitely learned the most from my job. Half sheer experience -- you can't write code all day every day for years and not become reasonably fluent. As well as that though, I've learned a lot from the people I work with. They're (mostly) very rigourous in their approaches, and experienced in finding the right approach to solve the problem. I'd rate myself as a great C programmer, an average software engineer, and an average, possibly below average C++ programmer. I've heard people far more experienced than me agree with Stroustrup on "C++ is a not a language that is ever "fully learned".".
I don't know if I've met any innately talented software engineers. Some of the guys I work with did amazing software engineering things when they were just kids. But then, they're generally very clever and would probably have been great at anything.
I think some people are more suited to it than others. I think I'm well suited to it, but I'm not innately talented. At university, I studied maths and computer science (joint honours) and it didn't take me long to realise I'd completely hit the wall with maths. I got through it and got a good degree, but it was a struggle -- it wasn't just challenging, it was outright beyond my capabilities.
I've never had that feeling with computers and software. I've felt overwhelmed and out of my depth many times, but if I keep at it I'll eventually figure it out. I don't think that's true for everyone -- so I think there's something there. I also think that my tendency to imagine the worst in every situation makes me a good engineer, but a crap person :)
I've talked about my programming life story before, you can find everything in this thread.
Nothing important has changed since I started that thread, mind.