Are Pro Coders Uber Demi Gods?

Started by
16 comments, last by superpig 17 years, 5 months ago
Well, Im a high school student, who just happens to want to be a professional coder someday (ahh)... And I've been wondering, what do pro coders know/where did they learn that? And of course, are you demi gods, or have you tried to make a virtual constructor :) ? As far as learning and stuff, Im a good enough coder that I've skipped CS2 and gone to CS3 (w/ only CS1 previously). But the only thing that I really know that most of the other kids in my class don't know is that this is the very tiny tiny itsy bitsy tip of the iceberg. (IE I only know that I am very very very ignorant about computers.) And one more question, what do they teach you in colledge, Of course I don't expect a complete answer, I'd need to go to colledge for that; but generally speaking. In "Joel on Software" (Im not sure, but I read this somewhere) I read that many CS101 college students couldn't wrap their heads around pointers.. What?! surely theres more to that statement than I read, because Im a highschooler, and (at least language wise) I understand pointers perfectly! (ProCoder, point out my ignorance/arrogance please) So to sum it all up, what can I expect to learn in colledge? and do ProCoders have (relatively) demi God Like knowledge, that a mere highschooler like me couldn't possibly learn, till after I graduate? Note: are there any online lectures by some CS professor? I'd be interested in listening to a few. Note2: I originally intended this topic to be something totally different, but then this idea came up, and I forgot to place this in the beginners section (where I think this should belong), really sorry about that. [Edited by - luke2 on October 23, 2006 5:29:52 PM]
Advertisement
Except for in the minds of the most egotistical, no, programmers arent demigods. Programming is just like any other difficult skill, at first it looks like a arcane art, but once you get into it and digest it into smaller pieces, it really isnt that difficult.

I won't kid you, it isnt the easiest profession to get into, probrably something that draws many programmers to the profession. Frankly, serving Slurpies or putting bolts onto the wheels of cars on an assembly line is much easier work. You need intelligence to program, their is no question. But, given interest and experience, you can become a good programmer without being a mensa level genius.

That said, some people will never "get it". Programming requires an aptitude, much like being a manager requires people skills. Some people just frankly arent cut out for the profession and you cant teach everyone through school alone how to be a programmer.

As to what you can learn in college, that depends on the college and, well... you. The answer is, they will cover atleast the basics. If you "get it" there is a pretty good chance that college will be very easy for you or, atleast average. At the very least, college will make you finish projects, which is more valuable then most self taught people will think.
Quote:Original post by luke2
Well, Im a high school student, who just happens to want to be a professional coder someday (ahh)... And I've been wondering, what do pro coders know/where did they learn that? And of course, are you demi gods, or have you tried to make a virtual constructor :) ?

As far as learning and stuff, Im a good enough coder that I've skipped CS2 and gone to CS3 (w/ only CS1 previously). But the only thing that I really know that most of the other kids in my class don't know is that this is the very tiny tiny itsy bitsy tip of the iceberg. (IE I only know that I am very very very ignorant about computers.)


And one more question, what do they teach you in colledge, Of course I don't expect a complete answer, I'd need to go to colledge for that; but generally speaking. In "Joel on Software" (Im not sure, but I read this somewhere) I read that many CS101 college students couldn't wrap their heads around pointers.. What?! surely theres more to that statement than I read, because Im a highschooler, and (at least language wise) I understand pointers perfectly! (ProCoder, point out my ignorance/arrogance please)

So to sume it all up, what can I expect to learn in colledge? and do ProCoders have (relatively) demi God Like knowledge, that a mere highschooler like me couldn't possibly learn, till after I graduate?

Note: are there any online lectures by some CS professor? I'd be interested in listening to a few.

Note2: I originally intended this topic to be something totally different, but then this idea came up, and I forgot to place this in the beginners section (where I think this should belong), really sorry about that.



It sounds like you have the mind for it, and that's an important start. It can be hard to get into the industry if you don't really get it, but you've memorized how to do certain things. Programming is much more intuitive than that; you have to learn how to think abstractly and learn how to do research.

Whether or not you take CS classes in college, you can always be playing around with it in the background. If you really like it and invest enough time, you will learn how to code well and it will get better with time. No, a great coder is not a demi god. Like the previous poster said, just like any profession there will be certain people who are incredible at it, but if you invest time and have the right mind for it (which it sounds like you do), you can become a pretty good coder in a couple years. Experience is very important with coding.

When I started coding (and sometimes now), sometimes I would feel overwhelmed with the amount of info out there. Take it slowly and do independant projects that interest you and you will learn more and more. If you're not sure where to start learning, think about a project and what you would like it to do in the end. Then try implementing it. You'll hit all kinds of problems and learn more every time you do that.
A few random key requirements for becoming a good coder:

Be a perfectionist.
Programming, more than in any other field, requires you to be exact in what you're doing. The current technology does permit you to just communicate the "gist" of what you're trying to program. You must be exact in every detail.

Don't rely on your schooling.
Now this probably goes for every major, but if you rely on what they teach you in school, you will turn out to be one hell of a mediocre programmer. Spend lots of time on your own. Learn several languages -- not just Java and C++! Write programs for yourself. That way, you aren't just "meeting the requirements" like you would for most classes. You only get out of programming what you put into it.

Tend to your code.
Your code you write is just as important as the binary EXE it generates. Comment your code. Use blank lines to paragraph it, but never throw blank lines in randomly. It doesn't matter what convention you use for your brackets, but choose a convention and stick with it. Line up your code. If you write a piece of code that looks "ugly" to you somehow, leave a note to rewrite it when you have spare time.

Learn languages of all different levels.
Learn C. C++ is nice and all, but it's complicated. C is closer to the machine. Speaking of the machine, learn (at least in part) one assembly language (x86 is the most obvious). Look into the basics of computer hardware. Know what an ALU is. Understand how the OS uses memory protection to keep you, the coder, from crashing it. Learn a scripting language such as Python or Ruby. See how a well-thought-out standard library and high-level code constructs can make programming so much easier.

Just some thoughts.
Quote:Original post by Tac-Tics
The current technology does permit you to just communicate the "gist" of what you're trying to program.
I'm guessing you meant 'does not permit', correct?
By and large, no.

Yes, not a few college freshmen (and often more advanced students since c/c++ is mostly faded from intro classes) have problems with pointers. Recently it seems that many people/kids have gotten it into their heads that college is for career training. You go in knowing nothing and come out completely ready to start 40+ years in the workforce. CS majors are no exception.

Sorry, it doesn't work like that.

Quote:
So to sume it all up, what can I expect to learn in colledge?


Hopefully how to spell...

Ahem, no really... you can expect to learn dozens of invaluable life lessons including the ever important ability to motivate yourself when nobody forces you to go to class. Depending on you, that will also include how to stumble back home drunk, how to get it on effectively, how to do your own laundry... tons of interesting and useful topics.

Oh, and you should learn about 2-3 years worth of calculus level math, 1-2 years of history and/or literature, 1-2 years of physics/chemisty, and then if you're at a decent school 1-2 years of intro/design followed by 2-3 years of theory.

Professional Developers then have work experience which usually involves learning to one degree or another various syntaxes, differing platforms/tools, business practice and requirements, how to avoid drama, how to shmooze, how to deal with assinine managers, how to deal with impossible requirements....

Quote:
and do ProCoders have (relatively) demi God Like knowledge, that a mere highschooler like me couldn't possibly learn, till after I graduate?


Relatively. Not that such knowledge isn't beyond a high schooler's capability. The key thing to note is that experience does matter. Since you're young, you're not really going to understand, especially if you're geeky and in high school and place knowledge at great importance, but at least listen.

Experience is important; more than knowledge most times. You can look knowledge up, google won't give you that fuzzy feeling that tells you a certain design won't work in certain cases. Or a good background with which to judge other people's code/ideas or to estimate how long a project will take.

Experience like that, largely by definition isn't available in the 0-4 years before you graduate high school.

Quote:
are there any online lectures by some CS professor? I'd be interested in listening to a few.


MIT has a lot of courses online for free if I'm not mistaken. There's likely a bit more.

Quote:Original post by luke2
I understand pointers perfectly! (ProCoder, point out my ignorance/arrogance please)


Since you asked

Note: Of those the smart pointers are the really useful ones (the others are specfic to c/c++, and don't come up that often). If you're already aware of those examples I'm sure I can dig up some more.

Although the article you were reading was most likely just talking about basic pointers. Pointers (and recursion among other things) can be hard for beginers (CS101 will be the first programming class for many people). Because pointers don't fit into that persons mental model of how the computer works. So to learn pointers they have to reshape their model so that it includes pointers. More expereinced programmers will have a lot of programming models they can switch between (You don't need pointers or even loops for an effective programming model). The best way IMHO to pick up new models is to learn different programming langagues. And I mean really different (Java and C# aren't that different from C++ in this case) langauges like lisp/scheme, haskell, python, ruby, smalltalk, assembly, etc...

Remember there will always be more to learn.

Quote:Original post by luke2
And I've been wondering, what do pro coders know/where did they learn that? And of course, are you demi gods, or have you tried to make a virtual constructor :) ?


Bending whatever definition of "Pro" you have to include myself for the time being...

1) Learned basics through a course in real life, self taught from books and internet resources then on. My most important tool in this endeavor has been Google. Learning to use it effectively is a must IMHO.

2) I have made virtual constructors... after a fashion. Depending on what exact semantics you're expecting, the factory pattern likely maps to whatever you're envisioning.

Quote:As far as learning and stuff, Im a good enough coder that I've skipped CS2 and gone to CS3 (w/ only CS1 previously). But the only thing that I really know that most of the other kids in my class don't know is that this is the very tiny tiny itsy bitsy tip of the iceberg. (IE I only know that I am very very very ignorant about computers.)


Understanding the depths of one's own ignorance is of tantemount importance (IMHO) in highly knowledge based fields such as programming. The field is already large enough that you must specialize to some degree getting into the field. For example, I'm utterly lacking in my project management skills, as well as more ancient languages such as COBOL and other "legacy" languages, applications, and technologies, as well as "enterprise" scaled applications (currently dominated by Java from what I understand).

It's important because it lets you know when you need to put down your normal tools and bring up a search engine. It prevents you from wasting time and energy reinventing the wheel on suboptimal solutions.

Quote:I read that many CS101 college students couldn't wrap their heads around pointers.. What?! surely theres more to that statement than I read, because Im a highschooler, and (at least language wise) I understand pointers perfectly!


It's a cognitive thing. Taught well, most people should be able to get their heads around pointers once their mental model of how they work clicks into place. A lot of people seem to be "taught" pointers without adequately explaining that model enough for it to click into people's minds. The fact that C/C++ uses * to declare pointer types - but yet swaps that around and sues * to dereference them as well (e.g. remove the indirection - remove the "pointerness") serves to further muddy the waters.

Quote:So to sume it all up, what can I expect to learn in colledge? and do ProCoders have (relatively) demi God Like knowledge, that a mere highschooler like me couldn't possibly learn, till after I graduate?


College isn't a magical place where magical fairies fart pure undiluted understanding, unfortunately. Accumulating all the necessary knowledge to become an expert programmer certainly takes awhile - but that's a property of learning over time and the current level of abstraciton in programming, rather than something special to college.

That said, good teachers are a diety-send and speed up the process by huge amounts. Not exactly sure how common they are, though. After all, good programmers get paid more than good teachers, unfortunately, and to be a good teacher on programming, you need to be a good programmer. And to stay a good programmer, you need to keep up to date and practice, as programming is a quickly evolving field.

10 years ago, there was no C++ standard. Nowadays, you're hard pressed just to try and figure out if a given line of C++ code has defined behavior or not. Or should even compile. Or does compile.

Fun fact to illustrate this point: You can't cast pointers-to-member-functions to/from (void *). They're often not even the same size (GNU's C++ compiler comes to mind). This is one of those little quirks in the language even I havn't gotten around to looking up the rationale behind - you so sure you know everything there is to know about pointers still? :-):

#include <iostream>struct A { void f () {} virtual ~A() {} };//Platforms://#1:  WinXP Home, Visual Studio 2005 Standard (tested 10/22/06)//#2:  WinXP Home, GCC 3.4.?                   (from memory)//#3:  OS X (PPC), GCC 4.0.1                   (tested 10/22/06)int main () {	using namespace std;	//                                            results for platform # 1 | 2 | 3	cout << "sizeof(void*)         == " << sizeof(void*)         << endl; // 4 | 4 | 4	cout << "sizeof(void (A::*)()) == " << sizeof(void (A::*)()) << endl; // 4 | 8 | 8		//this next line won't compile (switching to reinterpret_cast<>() does not help):	//   cout << "(void *) & A::f       == " << (void *) & A::f       << endl;	//#1: error C2440: 'type cast' : cannot convert from 'void (__thiscall A::*)( void )' to 'void *'	//#3: error: converting from 'void (A::*)() to 'void*'}


EDIT: See http://www.codeproject.com/cpp/FastDelegate.asp -- scrolling down to the paragraph titled "Implementations of Member Function Pointers" - for a more in depth discussion. It's really quite a sorrid tale.

[Edited by - MaulingMonkey on October 23, 2006 12:33:56 AM]
Quote:Original post by luke2
Well, Im a high school student, who just happens to want to be a professional coder someday (ahh)... And I've been wondering, what do pro coders know/where did they learn that? And of course, are you demi gods, or have you tried to make a virtual constructor :) ?


I got my first pro programming job in 1982, so I guess I've been a pro for near-on a quarter century (I wrote my first program in 1973, back when we had to use stone tools to punch our cards, which were in actual fact clay tablets, but I digress).

I'm certainly no demigod. I've rubbed shoulders with demigods, I've had a fair chunk of code included in things like GCC and while it make my ego so hard it threatens to rip my pants, it's humbling to work with people who could code you for lunch and still have brainpower left to order dessert.

Where do you learn to write good software? Well, the best way is to write bad software and learn from your mistakes.

You'll see a lot of folks posting on these boards with questions on how to implement linked lists, or whatever. That's a good start. Grab a copy of the C++ standard and try to implement most of the classes you'll find in the standard library. Not because you need to, but because you'll learn a lot. Don't bother publishing it or asking questions here (save yourself first). If you run into trouble, check the version that came with your compiler(s) to see how they did it. You can see much farther standing on the shoulders of giants.

Second, read much. If you're into C++, read Stroustrup, Josuttis, Langer & Kreft, Sutter, and Meyers. Then read Alexandrescu. Hang out at comp.lang.c++.moderated and its friends.

Third, join an open source project at SourceForge. Play with others while creating something of lasting value.

As for education, get one. Get more than one. I'm not really the academic sort, but I fund a B.Sc. in Computer Science pretty useful after I graduated. I'm still able to apply many of the topics I learned in various courses on Operting Systems, Compilers, Algorithms, not to mention linear algebra, discrete math, computability theory. Philosophy, psychology (hey, you might meet someone there to get her MRS degree), a lot of non-core subject can also be pretty useful as a programmer.

All in all, most pros are just regular folk who program a lot, and enjoy it.

Stephen M. Webb
Professional Free Software Developer

Quote:Original post by MaulingMonkey

This is one of those little quirks in the language even I havn't gotten around to looking up the rationale behind - you so sure you know everything there is to know about pointers still? :-):

*** Source Snippet Removed ***


Definitely not any more! :)

As for virt ctors; I presume you mean the virtual 'clone' constructor?

Thank you very much for your replies!

PS. Sorry bout that typo (sume = sum)

This topic is closed to new replies.

Advertisement