Learning on your own or formal training?
-
Sorry to post a dissenting opinion, but formal training is foundational. Unless you want to limit your career to an endless, dreary parade of add/change/delete screens, you need to know the time complexity of a collection of common problems, beginning with searching and sorting, or else you'll go around burdening one code base after another with non-optimal code that doesn't scale. You *can* learn this stuff on your own, but it's pretty dry. I betcha most people who learned on their own never went through a data structures book from end to end and worked out the problems. You only do that if somebody makes you. But like the preverbial awful-tasting medicine, it's good for you. When I was an undergraduate, a Bachelor's Degree consisted of 180 credit hours of instruction, and probably 3x that much practice. And half of that wasn't even computer science. My first year of work was about 2000 hours, and probably 75% of that was practice. The scale tips rather heavily toward experience even if you do get a degree. Nevertheless, those few hours of instruction exposed me to more different areas of computer science than ten years of development. In the 21st century, with worked-out libraries of searches and data structures, some people question the need for all that boring, dry stuff. And as I said before, if all you want to do your whole life is login pages, you can maybe get by. But for many devs, comes the day when you're writing a program that's going to run flat-out on 1000 servers, and even a 2x speedup means not buying an additional 1000 servers. On this day, when you have to custom-code that data structure to squeeze the last cycle of performance, whatcha gonna do? These are the moments that separate the heros from the wannabes; the guys who get the big stock bonuses and the cool assignments from the interchangeable wetware parts. Yeah, you *can* learn that stuff on your own... ...but did you?
SeattleC++ wrote:
But for many devs, comes the day when you're writing a program that's going to run flat-out on 1000 servers, and even a 2x speedup means not buying an additional 1000 servers.
you don't need to know what's np complete or np hard to figure out if you have a performance issue - you just need good common sense. That's exactly where *academics* failed and failed miserably. education is just 90% shit for 90% people - if real estate is a bubble, education is a much larger bubble (Think of the poor guy PhD grad 25 years old graduate find a job to code up website or warehouse apps?)
dev
-
I reckon I've learnt most of my development skills (coding and other stuff) from others code - good and bad - and from colleagues.
i am master degree educated, work in quant finance but i agree with you - i still regret countless hours i wasted in education just to get the right paper so i can be hired by reputable firms to earn a *middle class* income Also, schools didn't teach me how to think or communicate - they lied.
dev
-
SeattleC++ wrote:
But for many devs, comes the day when you're writing a program that's going to run flat-out on 1000 servers, and even a 2x speedup means not buying an additional 1000 servers.
you don't need to know what's np complete or np hard to figure out if you have a performance issue - you just need good common sense. That's exactly where *academics* failed and failed miserably. education is just 90% shit for 90% people - if real estate is a bubble, education is a much larger bubble (Think of the poor guy PhD grad 25 years old graduate find a job to code up website or warehouse apps?)
dev
devvvy wrote:
you don't need to know what's np complete or np hard to figure out if you have a performance issue - you just need good common sense.
You don't need education to know your delivered code has got a performance problem; your 8-year-old customers can tell you that. What may be less obvious is that at design time when you still have a chance to fix it, some algorithm you just figured out with common sense is (1) order-n-cubed, (2) not optimal, or that if it is optimal, that this feature is not going to scale and you better think of something else. People should be embarrassed if they make it through their CS program without getting a good grounding in algorithms and data structures. Maybe they should be angry too. But the knowledge itself is important; it will help the successful learner stand above the self-taught who didn't bother, as well as the lazy and inept who didn't absorb the material presented to them. It's true that some devs can't understand this stuff, even if the get the degree. I don't think it's 90%. I sure hope it isn't. Most folks I have worked with are pretty smart. Most folks I've worked with had CS degrees too.
-
jschell wrote:
However, by definition, most teachers are average.
no - by average, teachers are people with no real experience to offer
dev
devvvy wrote:
no - by average, teachers are people with no real experience to offer
Which is irrelevant, because the fact that someone has experience doesn't mean that they can teach it to someone else. Matter of fact those who are 'better' in some discipline are less likely to be able to teach it because the time that they spent learning the craft was time that the didn't spend learning how to teach.
-
I find that 90% of the useful knowledge I have came from hours of coding on my own and the community. The other 10% aka my degree just gets me through the door in some cases and allows me to punctuate my documentation. Why go to school, teach the next generation to code? :thumbsup: or :thumbsdown:
I find that 90% of what I learned, I learned from others. Some from classes I took in college, but now, 20 years later, most of what I know has been learned from others outside college. There are some techniques I learned in college that I still use, and that others have no clue about. They weren't fun to learn, and most of the world gets by fine without them, but I know just that little bit more than others, occasionally it even matters. College caused me to learn a lot more about a wide variety of computer topics than I ever would have done if left to my own, and I'm a pretty curious sort. A lot of the more esoteric topics I probably wouldn't have bothered to learn on my own because they take a lot of time for very little gain. On the other hand, sometimes topics come into vogue that I was forced to learn in college.. and then its a been-there-done-that sort of affair for me rather than an epiphany. College will teach you things and techniques that you won't teach yourself. Those things will end up being mental tools for you your whole career, or maybe even a basis of understanding and experience in some "new" programming idea that becomes popular later on in your career. Whether you want to spend the time and money to have that sort of background is up to you.
We can program with only 1's, but if all you've got are zeros, you've got nothing.
-
Ok, maybe it does a bit more but i have seen some amazing guys in the last few years who dropped out of college and are doing awesome
I'm one of them, though it's been many years. People generally scoff at the idea that I got a first rate education in computer science through the military, but I did and wouldn't change a thing. They weren't training me for some job I might get someday - they needed me to know what I was doing on their stuff. They don't necessarily teach good communication skills which I might otherwise have gotten at a university but I was fortunate to have had excellent mentoring that insisted on it. I'm not knocking a college education at all. I would have finished my degree while I was active duty, but I got this opportunity after-hours writing COBOL (this was the late 80's) for a local real estate company. I couldn't pass it up. I learned tons, and being the only one writing code had to answer for everything. You learn or you burn. I have to agree with the 90% consensus. 10% research, 90% jump in, figure it out, screw it up, fix it. I've had a great career going on 30 years now. Lately I write embedded micro-controller stuff, with a minor in android apps, next year, who knows?
-
Sorry to post a dissenting opinion, but formal training is foundational. Unless you want to limit your career to an endless, dreary parade of add/change/delete screens, you need to know the time complexity of a collection of common problems, beginning with searching and sorting, or else you'll go around burdening one code base after another with non-optimal code that doesn't scale. You *can* learn this stuff on your own, but it's pretty dry. I betcha most people who learned on their own never went through a data structures book from end to end and worked out the problems. You only do that if somebody makes you. But like the preverbial awful-tasting medicine, it's good for you. When I was an undergraduate, a Bachelor's Degree consisted of 180 credit hours of instruction, and probably 3x that much practice. And half of that wasn't even computer science. My first year of work was about 2000 hours, and probably 75% of that was practice. The scale tips rather heavily toward experience even if you do get a degree. Nevertheless, those few hours of instruction exposed me to more different areas of computer science than ten years of development. In the 21st century, with worked-out libraries of searches and data structures, some people question the need for all that boring, dry stuff. And as I said before, if all you want to do your whole life is login pages, you can maybe get by. But for many devs, comes the day when you're writing a program that's going to run flat-out on 1000 servers, and even a 2x speedup means not buying an additional 1000 servers. On this day, when you have to custom-code that data structure to squeeze the last cycle of performance, whatcha gonna do? These are the moments that separate the heros from the wannabes; the guys who get the big stock bonuses and the cool assignments from the interchangeable wetware parts. Yeah, you *can* learn that stuff on your own... ...but did you?
I hate to disagree with your dissenting opinion, but my experience has been the exact opposite. Full disclosure: I’ve coded for 20+ years and still don’t have any kind of degree. I firmly believe being a star coder isn’t about going to college or being self-taught. It’s 120% about drive... which I see in most self-taught coders. In fact in the interviews I’ve conducted (think about that for a moment) I’ve found that recent college grads are ~on average~ just about useless. In my opinion, if you need collage to be a coder then you don’t have what it takes to be a coder. That said, the absolute best among us have an amazing drive AND a degree. We can argue which is better to start with, but the best have both. And to answer your question: yep, I learned that stuff on my own. I’m currently going for a Bachelor's Degree. While some classes have been loads of fun, nothing in my programming focused degree is new or helps me code better.
-
I hate to disagree with your dissenting opinion, but my experience has been the exact opposite. Full disclosure: I’ve coded for 20+ years and still don’t have any kind of degree. I firmly believe being a star coder isn’t about going to college or being self-taught. It’s 120% about drive... which I see in most self-taught coders. In fact in the interviews I’ve conducted (think about that for a moment) I’ve found that recent college grads are ~on average~ just about useless. In my opinion, if you need collage to be a coder then you don’t have what it takes to be a coder. That said, the absolute best among us have an amazing drive AND a degree. We can argue which is better to start with, but the best have both. And to answer your question: yep, I learned that stuff on my own. I’m currently going for a Bachelor's Degree. While some classes have been loads of fun, nothing in my programming focused degree is new or helps me code better.
I agree with everything you say. (1) A lot of coders are not very special, to which I'd add that it probably doesn't matter whether they have a degree or not. I actually wonder what happens to these folks. Every employer is looking for top talent. Do they just never get a job? How do they get hired? (2) The best coders have drive and a good CS grounding, to which I'd add that whether they got the grounding on their own or in college isn't important, but the grounding is. (3) If you had enough drive to study data structures on your own, then you probably are having a great career, college or no. Now, in my experience, which also spans 20+ years coding, a degree from a good CS program is an easy-to-test proxy for drive. It means a candidate successfully pursued something difficult for four whole years. You still have to check that they're not a liar or an idiot, but it supports a working hypothesis when winnowing down a stack of resumes. Too many times when I've taken a chance on calling a candidate with no degree, I find out they're easily bored or distracted, can't or won't stay with long-term projects, or sound smarter at first than they really are when you challenge them. It's also usual to find that these candidates can't answer simple questions about the efficiency of sorting algorithms. If I know the person, or they have a good recommendation from someone I trust, that's a different situation. (I mean, duh). But the averages are not in favor of the self-taught.
-
I agree with everything you say. (1) A lot of coders are not very special, to which I'd add that it probably doesn't matter whether they have a degree or not. I actually wonder what happens to these folks. Every employer is looking for top talent. Do they just never get a job? How do they get hired? (2) The best coders have drive and a good CS grounding, to which I'd add that whether they got the grounding on their own or in college isn't important, but the grounding is. (3) If you had enough drive to study data structures on your own, then you probably are having a great career, college or no. Now, in my experience, which also spans 20+ years coding, a degree from a good CS program is an easy-to-test proxy for drive. It means a candidate successfully pursued something difficult for four whole years. You still have to check that they're not a liar or an idiot, but it supports a working hypothesis when winnowing down a stack of resumes. Too many times when I've taken a chance on calling a candidate with no degree, I find out they're easily bored or distracted, can't or won't stay with long-term projects, or sound smarter at first than they really are when you challenge them. It's also usual to find that these candidates can't answer simple questions about the efficiency of sorting algorithms. If I know the person, or they have a good recommendation from someone I trust, that's a different situation. (I mean, duh). But the averages are not in favor of the self-taught.
SeattleC++ Quote:
…easily bored or distracted…
I resemble that remark. Wait, what was the... Oooohhh look at the shiny thing!
SeattleC++ Quote:
…I agree with everything you say…
So I disagree with your dissenting opinion of the original post… and we agree? I’m confused. So if A=B and B=C, then … I think I need more college! :laugh: Joking aside, I’ve wondered how much location might affect the degree vs self-taught argument. Do good universities “suck up” coders who would otherwise self-teach? Do bad colleges promote self-taught coders? Food for thought… In the end it’s really about risk management. Ignoring degree-less coders ignores some fantastic coders… along with some not-so-great coders that college would otherwise weed out. I guess it’s a “pick your poison” situation.
-
Florin Jurcovici wrote:
Putting all teachers in the same pot based on the few examples you got to know is IMO not pragmatic. Sort of catch-all exception handling ...
However, by definition, most teachers are average. And it also ignores the fact that for every student exposed to an excellent teacher another is exposed to a sub-standard one.