Sign in to follow this  

Are Pro Coders Uber Demi Gods?

This topic is 4065 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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]

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
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?

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
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]

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
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)

Share this post


Link to post
Share on other sites

My experience is that, after the the first year or so, college CS courses start to look more and more at interesting things that you could be coding, rather than teaching more about how to code.

Here's a summary of what I learned in my undergrad courses. I'm listing the things I actually took from the courses, not necessarily what they focused on. The list isn't comprehensive. I also took lots of graphics courses, and some AI.

CS 201/202: Computer Science 1 and 2
- The basics (C/C++)
- Recursion
- Simple data structures (arrays/linked lists)
- The very beginnings of algorithm analysis

CS 211: Assembly language programming
- What registers are, what the x86 instruction set looks like

CS 331: Programming Languges
- Context free grammars
- Different flavors of programming languages (imperative,functional,etc)
- Java and Lisp

CS 341: Data structures
- Lists, stacks, queues
- Trees (including the self-balancing kind)
- Heaps and priority queues
- Disjoint sets
- Hash tables
- Graphs, and basic graph algorithms
A good data structure course will assume that you know how to code, and start teaching you about all the interesting things you can build now that you know how. You'll also get some of your toughest coding projects here.

CS 411: Computer architecture
- The architecture of a pipelined CPU.
- How memory systems and caches work.
- How pipeline stalls occur and how they affect execution performance.

CS 431: Object Oriented Systems
- How to design a large system properly
- What object orientation really means

CS 421: Operating systems
- All the useful things that operating systems do for you
* scheduling
* resource allocation and sharing (how to avoid deadlocks, conflicts)
- How multi-threading works

CS 441: Algorithms
- How to prove that things work
- How to analyze algorithms for efficiency
- Lots of interesting, useful algorithms

Share this post


Link to post
Share on other sites
I have been coding "professionally" for about 2 months now, but a vast majority of what I learned was through side projects and experimentation. I have a math degree, so I have no "formal" training. The best advice I can give is to stick with it and try to learn from others. Getting other opinions and methods will only help open your mind to more possibilities. So to answer your first question, I am definitely not a demi god, nor are most of the people I work with! We're just regular people who worked hard at coding. A lot of it has to do with your thought process, but hard work and persistence plays a large role as well.

As for college, make sure you take all of your classes seriously, as a lot of CS majors drop because of the "boring" intro classes. It says a lot to an employer that you work hard, even at things that may bore the heck out of you. I have a CS minor, so I took a few of those classes. I didn't take one of them seriously and it actually cost me at an interview!


All of the posters before me have excellent points you should take and hold on to. I definitely think you are on the right track and wish you the best in your efforts.

Share this post


Link to post
Share on other sites
Quote:
Original post by Bregma
If you're into C++, read Stroustrup, Josuttis, Langer & Kreft, Sutter, and Meyers. Then read Alexandrescu.
Just wanted to say, thanks for that![cool]

Share this post


Link to post
Share on other sites
Of course us ProCoders are DemiGods!!!! Mwuhahahaha!!! Look upon my mighty works and behold the awsomeness of the ProCoder!

#include <iostream>
void main(int,char**a){for(int b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;b<atoi(a[1]);(d|f|h)>1?e*=d>1?--d:1,g*=f>1?--f:1,i*=h>1?--h:1:((std::cout<<(i*g?e/(i*g):1)<<" "?d=b+=c++==b?c=0,std::cout<<std::endl?1:0:0,h=d-(f=c):0),e=d,g=f,i=h));}

Nurse! The Screens!
</madprogrammer>

Skizz (going off to lie down in a dark room for a bit)

Share this post


Link to post
Share on other sites
I used to think alot like you at one time, but there really is nothing special about a programmer. Writing code professionally is all about making something work under a given set of requirements. And therein lies the challenge, sometimes it can be very difficult to work under the requirements given to you. It is expected that you have a clean coding style, and that you document your code to an extent.

If you really want to get ahead of the game though, start trying to find ways to explain how your program works to a non-programmer. Not only will it help you see the faults in your software, but it will prepare for a project-management role once you are through with school.

Share this post


Link to post
Share on other sites
Quote:

It must be really fun to work in the industry, imagine coding all day!

Hehehe.

Just remember, you're only a high school student, and as much as you might think you love something now and want to do it professionally for the rest of your life, you have no idea what the future will hold.

Just remember that. Keep your options open and don't pigeonhole yourself.

Share this post


Link to post
Share on other sites
Quote:
Are Pro Coders Uber Demi Gods?


No.

The thing that most seasoned professionals will have that you don't is experience - seems obvious, but it's experience of particular things that I want to point out. Like experience of what it's like to work on a project alongside other people. Experience of what it's like to work to a schedule. Experience of what it's like to cope with the customer/publisher changing the requirements on you as you go along.

The really good programmers aren't the ones who know all the obscure language tricks or the ones who know the language standard off by heart. They're the ones who will get the project finished fastest at as high a quality level as possible. Often, it means they write less code than most, because they reuse code more effectively, making better use of libraries and middleware. The more code you write, the longer it takes you to write (and debug) it.

When I first joined the games industry, I thought I'd be pretty sorted - I've been programming since I was 4, and had around 7 years C++ experience when I joined my first firm. It wasn't until I broke the build (i.e. checked code into the central repository that didn't compile on some other peoples'/projects' machines) a few times that I realised just how wrong I was. Real-world nontrivial software projects are just so darned big that you can't hope to understand the entire codebase yourself: as a result, you can no longer know all the possible effects that a change of yours might have. This is why things like modularity, documentation, and team communication are important - they help you understand and isolate the potential effects of your code, so that you don't make any accidental mistakes.

Want to see just what kind of thing you could find yourself looking at in the real world? Microsoft released the source code to MechCommander 2, a DirectX 7-based game from Nival Interactive. Take a look. Can you imagine joining such a project halfway through its lifetime?

There are a few coders that people might tell you are "uber demi gods." Ignore people, because people is wrong. They're just people - usually very clever, experienced people, but people none the less. Just because John Carmack or Joel Spolsky say something doesn't necessarily mean they're right - if you're not sure about something you should never be afraid of "checking their working." If you're polite, and you've made as much effort as you can to understand it on your own, then asking them for clarification or confirmation is never a bad plan. Most people appreciate a desire to learn, and are often very happy to explain.

Share this post


Link to post
Share on other sites

This topic is 4065 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this