CS50x Course
OOP Ruby Thing
+ Show Spoiler [Old OP] +
A Pretty Good Blog
These are really good posts. Everyone should read them.
On January 29 2012 17:02 Crazyeyes wrote:
Alright, I've got a little question for you guys. I'm currently in third year university, major in computer science. Before University, I honestly didn't even know what programming was.
So anyways. As I've mentioned, I'm third year. All of my knowledge in computer programming comes from my classes. I'll admit I'm not the best student, but I do pay attention when I can and I'm not exactly failing my way through this. I don't ever program on my free time or read programming-related things that aren't school related.
So far, we've pretty much only learned Java when it comes to useful programmming languages. I did a bit in Scheme, a very small amount in Assembly (I forgot most of it, honestly. It was horrible), some HTML... and I'm currently learning C. Much harder than I expected. Pointers sorta confuse me sometimes.
The thing is, I feel like I don't know anything. I feel like pepole who have way less education than me are more capable than I am. I've never said "I've made a script to do...."
I dont even know what that is.
What I hope is going on is that I'm being given the basic (and hopefully more advanced, too) programming skills and knowledge that can be applied to all computer science, and then the more specific things I'll be able to pick up without too much effort. I'm hoping that when I sit down and am told to do X at some random job, I'll be able to do it and be surprised with how much I know.
I'm just not very sure.
So, to any of you who come from a similar background (learned everything at school), can you shed some light on your situation? Is this normal?
Alright, I've got a little question for you guys. I'm currently in third year university, major in computer science. Before University, I honestly didn't even know what programming was.
So anyways. As I've mentioned, I'm third year. All of my knowledge in computer programming comes from my classes. I'll admit I'm not the best student, but I do pay attention when I can and I'm not exactly failing my way through this. I don't ever program on my free time or read programming-related things that aren't school related.
So far, we've pretty much only learned Java when it comes to useful programmming languages. I did a bit in Scheme, a very small amount in Assembly (I forgot most of it, honestly. It was horrible), some HTML... and I'm currently learning C. Much harder than I expected. Pointers sorta confuse me sometimes.
The thing is, I feel like I don't know anything. I feel like pepole who have way less education than me are more capable than I am. I've never said "I've made a script to do...."
I dont even know what that is.
What I hope is going on is that I'm being given the basic (and hopefully more advanced, too) programming skills and knowledge that can be applied to all computer science, and then the more specific things I'll be able to pick up without too much effort. I'm hoping that when I sit down and am told to do X at some random job, I'll be able to do it and be surprised with how much I know.
I'm just not very sure.
So, to any of you who come from a similar background (learned everything at school), can you shed some light on your situation? Is this normal?
On January 29 2012 17:54 Abductedonut wrote:
I can say that this is a direct result of learning java first. I know lots of students who come from java without any prior programming experience and C/Assembly is horrible to them and they don't feel like know "anything."
Here's the basic truth.... Computer Science isn't all programming. Programming is how you APPLY the concepts you learn in computer science. To use an analogy, you're learning how to build a car from inside before actually building it ( programming ). Algorithms and data structures and classes like that teach you when to use a V8 engine rather than a V12 engine... etc etc.
So if I were to basically list out languages from lowest level to highest, it would sorta go like this:
- Machine Language
- Assembly
- C
- C++/Java/C#...
Machine Language is pretty useless to learn from what I've seen. Assembly is SUPER important because C/C++ code eventually gets translated to assembly. It's important to learn what happens on the lower levels when you create a function in C. You want to know how C sets up the stack and all that, and that's how knowing Assembly Language helps.
Anyway, I digress. As you learn C, you will realize that you'll slowly become "pro" at programming. No bullshit things like objects and code written for you in C. C really is a no-bullshit language, and you have to know exactly what you're doing or else you'll spend majority of your time fighting the code.
C will introduce you to wildly advanced topics like returning ANY type of data from a function (void pointers), passing entire functions as arguments, or returning entire functions ( function pointers )... hell you'll even learn neat tricks like optimizing switch statements by using function pointers. You'll learn EXACTLY when to pass things by reference and EXACTLY what happens inside your code. No more "let's change this and hope it works!" C is THE nerd's computer language. Most people in this thread will come in here and argue that java, python, whatever language they use is better and it might be true, but you don't "truly" learn to program unless you do so in C.
Once you're completely comfortable with the basics on C, I suggest you work on mastering these topics:
- OS APIs... ( WIN32 API, int 0x80 system calls.. ( basically linux system calls )... dunno what trashSX uses... )
- Network Programming ( Sockets, TCP/UDP ports, sending GET/POST through C for port 80 )
- Multi-threaded Programming
- GUI Programming using OS APIs... Avoid using things like QT's drag and drop GUI builder because you won't learn anything
- * This list in incomplete, but that's all that comes to my mind atm. I could mention things like global keyboard hooks, directX hooks, etc, but you'll discover those as you want to do certain projects. Will add stuff if I can remember it for the future! *
Once you've got all that down, you'll pretty much be able to program "anything." Your CS classes will come back remind you what search algorithms, data structures, and boolean logic to use to make your programs better.
At this point, when you move onto other languages it will be more about syntax. Your questions will shift from "Well how do I connect to a server?" to "Where can i find the socket API to this language?" You'll know what you need, and it will just be a matter of how to find it. I've gotten to a point where I can learn languages in about 2 hours. I learned how to program in matlab to help my friend out in under 20 minutes. I learned javascript programming for Adobe After Effects in about an hour and I was able to help visual effects artists modify various features of their shots by writing scripts for them.
That's my suggestion to you. Learn C, then go back and touch over assembly and you'll be able to program in anything.
Now... if you want to be a TRUE nerd and pwn EVERYONE at programming... start learning how to hack/crack/reverse engineer software. Hacking requires you know everything about everything, and it will open up your eyes to programming like you've never seen before. You'll learn how accidentally using a pointer after freeing it can cause a skilled programmer/hacker to compromise the entire system. Hacking is the CRUX of computers, and the most skilled programmers and computer scientists result from hacking. You can start off with a book called "The Shellcoder's Handbook" if you're interested in touching on the topic. That book is very technical and will really get you thinking about how things inside the computer work...
Ah, and just for some light reading... Here's a post by Linus Torvalds... the creator of the Linux operating system. I think this is hilariously interesting!
+ Show Spoiler +
I can say that this is a direct result of learning java first. I know lots of students who come from java without any prior programming experience and C/Assembly is horrible to them and they don't feel like know "anything."
Here's the basic truth.... Computer Science isn't all programming. Programming is how you APPLY the concepts you learn in computer science. To use an analogy, you're learning how to build a car from inside before actually building it ( programming ). Algorithms and data structures and classes like that teach you when to use a V8 engine rather than a V12 engine... etc etc.
So if I were to basically list out languages from lowest level to highest, it would sorta go like this:
- Machine Language
- Assembly
- C
- C++/Java/C#...
Machine Language is pretty useless to learn from what I've seen. Assembly is SUPER important because C/C++ code eventually gets translated to assembly. It's important to learn what happens on the lower levels when you create a function in C. You want to know how C sets up the stack and all that, and that's how knowing Assembly Language helps.
Anyway, I digress. As you learn C, you will realize that you'll slowly become "pro" at programming. No bullshit things like objects and code written for you in C. C really is a no-bullshit language, and you have to know exactly what you're doing or else you'll spend majority of your time fighting the code.
C will introduce you to wildly advanced topics like returning ANY type of data from a function (void pointers), passing entire functions as arguments, or returning entire functions ( function pointers )... hell you'll even learn neat tricks like optimizing switch statements by using function pointers. You'll learn EXACTLY when to pass things by reference and EXACTLY what happens inside your code. No more "let's change this and hope it works!" C is THE nerd's computer language. Most people in this thread will come in here and argue that java, python, whatever language they use is better and it might be true, but you don't "truly" learn to program unless you do so in C.
Once you're completely comfortable with the basics on C, I suggest you work on mastering these topics:
- OS APIs... ( WIN32 API, int 0x80 system calls.. ( basically linux system calls )... dunno what trashSX uses... )
- Network Programming ( Sockets, TCP/UDP ports, sending GET/POST through C for port 80 )
- Multi-threaded Programming
- GUI Programming using OS APIs... Avoid using things like QT's drag and drop GUI builder because you won't learn anything
- * This list in incomplete, but that's all that comes to my mind atm. I could mention things like global keyboard hooks, directX hooks, etc, but you'll discover those as you want to do certain projects. Will add stuff if I can remember it for the future! *
Once you've got all that down, you'll pretty much be able to program "anything." Your CS classes will come back remind you what search algorithms, data structures, and boolean logic to use to make your programs better.
At this point, when you move onto other languages it will be more about syntax. Your questions will shift from "Well how do I connect to a server?" to "Where can i find the socket API to this language?" You'll know what you need, and it will just be a matter of how to find it. I've gotten to a point where I can learn languages in about 2 hours. I learned how to program in matlab to help my friend out in under 20 minutes. I learned javascript programming for Adobe After Effects in about an hour and I was able to help visual effects artists modify various features of their shots by writing scripts for them.
That's my suggestion to you. Learn C, then go back and touch over assembly and you'll be able to program in anything.
Now... if you want to be a TRUE nerd and pwn EVERYONE at programming... start learning how to hack/crack/reverse engineer software. Hacking requires you know everything about everything, and it will open up your eyes to programming like you've never seen before. You'll learn how accidentally using a pointer after freeing it can cause a skilled programmer/hacker to compromise the entire system. Hacking is the CRUX of computers, and the most skilled programmers and computer scientists result from hacking. You can start off with a book called "The Shellcoder's Handbook" if you're interested in touching on the topic. That book is very technical and will really get you thinking about how things inside the computer work...
Ah, and just for some light reading... Here's a post by Linus Torvalds... the creator of the Linux operating system. I think this is hilariously interesting!
+ Show Spoiler +
http://thread.gmane.org/gmane.comp.version-control.git/57643/focus=57918
On January 29 2012 22:22 ObliviousNA wrote:
Damn, that linux link was interesting. Your response was articulated much better than I could have hoped to do, that was an excellent read.
@Crazyeyes, I was in the exact same boat last year. I was a third year who had only ever done TI-83+ programming, and sort of came to the major by accident. Then I got a job at a career fair, and my confidence soared. Frankly I didn't know jack**** about any of the languages I needed to, but what I did know was the concepts. Learning languages, APIs, etc is surprisingly easy once you've got a decent grasp on your first few.
I did have the advantage of learning C first though, which I didn't really appreciate at the time. (Looking back, I'm very glad I had the low-level overview because I would have been severely lost in several major projects since then if it weren't for the foundation in C).
Anyway, my advice is to get ANY kind of employment, paid, with the school, with a group of friends, or otherwise, and learn from there. I look back and find myself SHOCKED at how utterly unqualified I was for this position 6 months ago. You end up learning a ton through trial and error, but the concepts at college give you a really good foundation. You're learning how to learn, and after that it's up to you to apply it.
One more thing - I used to be intimidated by phrases like 'running scripts', etc. (Lot's of nerdy friends). It's not nearly as impressive as it sounds. Useful, but not difficult.
Damn, that linux link was interesting. Your response was articulated much better than I could have hoped to do, that was an excellent read.
@Crazyeyes, I was in the exact same boat last year. I was a third year who had only ever done TI-83+ programming, and sort of came to the major by accident. Then I got a job at a career fair, and my confidence soared. Frankly I didn't know jack**** about any of the languages I needed to, but what I did know was the concepts. Learning languages, APIs, etc is surprisingly easy once you've got a decent grasp on your first few.
I did have the advantage of learning C first though, which I didn't really appreciate at the time. (Looking back, I'm very glad I had the low-level overview because I would have been severely lost in several major projects since then if it weren't for the foundation in C).
Anyway, my advice is to get ANY kind of employment, paid, with the school, with a group of friends, or otherwise, and learn from there. I look back and find myself SHOCKED at how utterly unqualified I was for this position 6 months ago. You end up learning a ton through trial and error, but the concepts at college give you a really good foundation. You're learning how to learn, and after that it's up to you to apply it.
One more thing - I used to be intimidated by phrases like 'running scripts', etc. (Lot's of nerdy friends). It's not nearly as impressive as it sounds. Useful, but not difficult.
On March 23 2011 03:36 TheBB wrote:
Did we do this yet?
Relevant reading material.
BTW OP: Here are some Haskell links for the OP.
http://book.realworldhaskell.org/read/
http://learnyouahaskell.com/chapters
Did we do this yet?
Relevant reading material.
Poll: Indentation style
Allman (430)
55%
K&R (332)
42%
Whitesmith (24)
3%
786 total votes
K&R (332)
Whitesmith (24)
786 total votes
Your vote: Indentation style
BTW OP: Here are some Haskell links for the OP.
http://book.realworldhaskell.org/read/
http://learnyouahaskell.com/chapters
Some Advice
Just today (10 December 2010), I got a PM from a person, asking a few things.
+ Show Spoiler [original message] +
Hey,
I hope you don't mind the email. I saw that you started "The Big Programming Thread" and I'm interested in learning programming.
I'm currently a Masters student in Biomedical Engineering, but I recently became really interested in getting into programming due to a project I've been doing that involves (very basic) C++ for a microcontroller. I'm hoping to apply to some software engineer/development jobs when I graduate.
However, a lot of these jobs call for a lot of skills that I don't have such as C, C#, Java, Python, Ruby, MySQL, etc. As a computer science major, did you actually learn all of these and have a full understanding before you had to apply, or did you just have a basic understanding? I'm not sure if these companies expect that I know these languages in depth or if I just need a good foundation.
Also, is there a language that you would recommend as a "first step" that would make it easier to learn the others? I only have a few months left (< 2) that I have before I need to start applying to jobs, so hopefully I can learn one really well for a good foundation and just brush up on the others really quickly to understand the basics. I know that this won't be enough time to have a deep understanding of each, but if companies don't expect that right away, then maybe I can at least get the job first then learn them more.
Thanks.
I hope you don't mind the email. I saw that you started "The Big Programming Thread" and I'm interested in learning programming.
I'm currently a Masters student in Biomedical Engineering, but I recently became really interested in getting into programming due to a project I've been doing that involves (very basic) C++ for a microcontroller. I'm hoping to apply to some software engineer/development jobs when I graduate.
However, a lot of these jobs call for a lot of skills that I don't have such as C, C#, Java, Python, Ruby, MySQL, etc. As a computer science major, did you actually learn all of these and have a full understanding before you had to apply, or did you just have a basic understanding? I'm not sure if these companies expect that I know these languages in depth or if I just need a good foundation.
Also, is there a language that you would recommend as a "first step" that would make it easier to learn the others? I only have a few months left (< 2) that I have before I need to start applying to jobs, so hopefully I can learn one really well for a good foundation and just brush up on the others really quickly to understand the basics. I know that this won't be enough time to have a deep understanding of each, but if companies don't expect that right away, then maybe I can at least get the job first then learn them more.
Thanks.
My original reply was going to be rather short, but I realized about 15 minutes in that I was still typing and had more to say.
+ Show Spoiler [response] +
Beware, this is a lot longer than I thought it would be :O
Anyway, no, I didn't. Ruby, MySQL, and PHP (among others) are web languages, and you'd learn in Web Design courses. Java, C++, and C# are all quite similar in syntax (they are all derivatives of C), although they are quite radically different from each other.
In my CS courses, I spent quite a bit of time on C++ (nearly 6 months, and Drexel runs 4 10-week quarters per year). After that, I had a single course that covered Linux and common scripting languages (Python, Perl, BaSH, awk, and some others). The more advanced CS courses focus on assembly and associated languages (VHDL mostly), or are theory oriented, where the concepts and math are taught, and problems are typically done with pure math (either state diagrams, or things like K-maps in Boolean Algebra).
I actually learned most of the languages I know before I ever got to university. I had a year of C++ and a year of Java in high school, which definitely helped, but I started with QBASIC when I was 11. Basically, I went like this:
QBASIC -> HTML (not a programming language) -> C/++ -> Java -> Visual BASIC -> PHP, MySQL -> C# -> C++ (HS) -> Java (HS) -> VB.Net -> C++ (Uni) -> Perl, Python, BaSH, Awk, other stuff -> MIPS (a form of assembly) -> VHDL
Anyway, programming is a lot like art. You make something, and show it off. That's part of why a lot of developers will have whatever side project they run in Open Source. What language(s) you learn will also be affected by your goals. There's basically two ways to approach programming.
The first way, which is how most people learn who independently go about programming, is to pick a language, learn it, and then do whatever they want with that language.
The other way, which is what is taught in universities (not so much high schools), is to learn all of the math and concepts you need, and the basics of multiple languages. That way, you can pick the best language for the task at hand.
Now, there's also the third way, which is actually just both of the above done at the same time. Say, for example, that you know C++ very well, but you're tasked with something that would be better done in PHP and MySQL. Well, that's where you start combining things. Basically, you write the program in C++, and then port it over to PHP+MySQL. When first starting this, you'll probably end up actually writing in C++ before porting, but after a while you'll get into being able to just visualize the C++, and then porting in your brain, and then finally into just knowing PHP+MySQL. And this works with just about any languages.
Regardless, if you interview at a company that knows how to interview for a programming position, you'll most likely run into a practical set of interviews. Most of this will be logical problems that will test your math foundations. You don't have to know the answers or even find them, as long as while you work out the problems you logically explain each step. I'd say the most important classes you could take to help you with this would be Data Structures and Algorithms, another class which was the precursor to that (sorry I don't know what it's called, as Drexel's name for it was simply "Mathematical Foundations of Computer Science"), Boolean Algebra, and probably a calculus or statistics course (which you've probably already taken).
Learning a specific language is up to you. If you like working with microcontrollers then learning C, C++, and the fundamentals of ix86 assembly and MIPS are your best bet. If you'd rather work with desktop applications, C# is probably best, followed by VB.Net. Finally, there's internet applications. Here's a bit tricky. You'll need to know HTML, JavaScript, CSS, and SQL for just about any job in the industry, and then you'll need to know either PHP or ASP.
Anyway, no, I didn't. Ruby, MySQL, and PHP (among others) are web languages, and you'd learn in Web Design courses. Java, C++, and C# are all quite similar in syntax (they are all derivatives of C), although they are quite radically different from each other.
In my CS courses, I spent quite a bit of time on C++ (nearly 6 months, and Drexel runs 4 10-week quarters per year). After that, I had a single course that covered Linux and common scripting languages (Python, Perl, BaSH, awk, and some others). The more advanced CS courses focus on assembly and associated languages (VHDL mostly), or are theory oriented, where the concepts and math are taught, and problems are typically done with pure math (either state diagrams, or things like K-maps in Boolean Algebra).
I actually learned most of the languages I know before I ever got to university. I had a year of C++ and a year of Java in high school, which definitely helped, but I started with QBASIC when I was 11. Basically, I went like this:
QBASIC -> HTML (not a programming language) -> C/++ -> Java -> Visual BASIC -> PHP, MySQL -> C# -> C++ (HS) -> Java (HS) -> VB.Net -> C++ (Uni) -> Perl, Python, BaSH, Awk, other stuff -> MIPS (a form of assembly) -> VHDL
Anyway, programming is a lot like art. You make something, and show it off. That's part of why a lot of developers will have whatever side project they run in Open Source. What language(s) you learn will also be affected by your goals. There's basically two ways to approach programming.
The first way, which is how most people learn who independently go about programming, is to pick a language, learn it, and then do whatever they want with that language.
The other way, which is what is taught in universities (not so much high schools), is to learn all of the math and concepts you need, and the basics of multiple languages. That way, you can pick the best language for the task at hand.
Now, there's also the third way, which is actually just both of the above done at the same time. Say, for example, that you know C++ very well, but you're tasked with something that would be better done in PHP and MySQL. Well, that's where you start combining things. Basically, you write the program in C++, and then port it over to PHP+MySQL. When first starting this, you'll probably end up actually writing in C++ before porting, but after a while you'll get into being able to just visualize the C++, and then porting in your brain, and then finally into just knowing PHP+MySQL. And this works with just about any languages.
Regardless, if you interview at a company that knows how to interview for a programming position, you'll most likely run into a practical set of interviews. Most of this will be logical problems that will test your math foundations. You don't have to know the answers or even find them, as long as while you work out the problems you logically explain each step. I'd say the most important classes you could take to help you with this would be Data Structures and Algorithms, another class which was the precursor to that (sorry I don't know what it's called, as Drexel's name for it was simply "Mathematical Foundations of Computer Science"), Boolean Algebra, and probably a calculus or statistics course (which you've probably already taken).
Learning a specific language is up to you. If you like working with microcontrollers then learning C, C++, and the fundamentals of ix86 assembly and MIPS are your best bet. If you'd rather work with desktop applications, C# is probably best, followed by VB.Net. Finally, there's internet applications. Here's a bit tricky. You'll need to know HTML, JavaScript, CSS, and SQL for just about any job in the industry, and then you'll need to know either PHP or ASP.
Guides
Because we can all use some help every now and then...
+ Show Spoiler [C#] +
C# programming guide by Microsoft: http://msdn.microsoft.com/en-us/library/67ef8sbd.aspx
C# reference by Microsoft: http://msdn.microsoft.com/en-us/library/618ayhy6.aspx
Cool guide thingies: http://www.dotnetperls.com/
All were recommended by Manit0u
C# reference by Microsoft: http://msdn.microsoft.com/en-us/library/618ayhy6.aspx
Cool guide thingies: http://www.dotnetperls.com/
All were recommended by Manit0u
+ Show Spoiler [HTML, CSS, and JavaScript] +
http://api.prototypejs.org/ - Prototype is a JavaScript API which is designed to give very fine control of interface manipulation. It's in the same family of "languages" as jQuery.
HTML5: http://www.whatwg.org/specs/web-apps/current-work/multipage/index.html
HTML5 Canvas Element: http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html
HTML5 Video Element: http://www.w3.org/TR/html5/video.html
DOM: http://www.w3.org/DOM/ (what's going on inside the browser, if you dare to peek)
Douglas Crockford's "The Good Parts" Talk:
http://www.crockford.com/javascript/
http://www.jslint.com/
http://www.json.org/
http://jquery.org - look into QUnit test suite and JQueryUI also, very handy stuff
Credit to mmp for all but first link
+ Show Spoiler [PHP] +
http://www.php.net/ - Not the best place for tutorials, but the reference content is presented in a much clearer format that most other manuals
+ Show Spoiler [MySQL] +
http://dev.mysql.com/doc/#manual - Again, not a tutorial place, but a very good reference manual.
+ Show Spoiler [C++] +
http://www.cplusplus.com/ - More of a reference site, but forums are great for getting answers
http://www.cppreference.com/wiki/start - Credit to DeathByMonkeys for link
http://www.cprogramming.com/ - Credit to DeathByMonkeys for link
+ Show Spoiler [Objective C] +
+ Show Spoiler [iOS] +
edumobile
http://www.raywenderlich.com/
http://iphonedevsdk.com/
http://www.stanford.edu/class/cs193p/cgi-bin/drupal/
http://cocoadev.com/
I don't know anything about these or iOS in general. All were recommended by 3FFA
+ Show Spoiler [Python] +
http://inventwithpython.com/ - ABear sent this link to me. ABear! ABear! Ohhhnoooo ABear!
http://docs.python.org/tutorial/ - credit to mmp for link (personally, I haven't looked at this yet)
http://docs.python.org/library/ - credit to mmp for link (personally, I haven't looked at this yet)
http://docs.djangoproject.com/en/1.2/ - Like jQuery or Prototype for Python, only not really. Credit to mmp for link
http://learnpythonthehardway.org/book/ - Awesome site minus_human linked me. Has a lot about Python, but also many of the things it advocates apply to all kinds of other languages.
http://code.google.com/edu/languages/google-python-class/ - Google's Python Class, credit Vilonis
http://codingbat.com/ - Self assigned homework (for practice), 3FFA
+ Show Spoiler [Java] +
http://download.oracle.com/docs/cd/E17409_01/javase/tutorial/ - credit to mmp (personally, I haven't looked at this yet)
http://www.javabeginner.com/Java-keywords.doc - This is a DOC file, be warned! I haven't looked at it yet, but it apparently covers the basics (things like public, private, etc). Credit to UdderChaos for the link.
http://www.blackbeltfactory.com/ui#! - An annoyingly CPU intensive website made from JAVA for some reason, but it's got a bunch of courses and such about Java programming.
http://codingbat.com/ - Self assigned homework (for practice), 3FFA
+ Show Spoiler [NIX] +
+ Show Spoiler [OpenGL] +
http://www.songho.ca/opengl/index.html
http://www.lighthouse3d.com/opengl/glsl/
Credit to fanta[Rn] for both of these
+ Show Spoiler [General] +
How to Write Unmaintainable Code - Thanks to Sachem for this
The O'Reilly books - Very good but not free. A good call when you want thoroughness and quality for some less-than-mainstream technologies. (Credit to mmp for this)
http://stackoverflow.com/ - Credit to DeathByMonkeys for link
http://news.ycombinator.com/ - Like Twitter for developer news (it's an aggregater). Credit to shmay for the link
+ Show Spoiler [Algorithms] +
http://projecteuler.net/index.php?section=about - Credit to DeathByMonkeys for link
Data Structures and Algorithms - Probably the best book out there on the subject. It has all kinds of info from ordinals (usually called Big-O notation) to the kinds of data structures that are best for each kind of data storage to the best algorithms for retrieving data from those structures.
http://www.spoj.pl/ - Submit algos and get them solved, or submit solutions to algos already posted. Pretty neat site. It's mostly English, so don't worry about that pl TLD. Credit to uNiGNoRe for the link.
People willing to help with stuff
mmp
tofucake
FaCE_1
Epsilon8
CrimsonWall
lozarian
On July 09 2010 03:24 mmp wrote:
Nehe's site is very good for getting started with OpenGL but his source is very amateur (he admits this) and shouldn't be copy-pasted verbatim. http://www.opengl.org/code/ and http://www.opengl.org/sdk/docs/man/ are good places to visit once you have a feel for the API.
Nehe's site is very good for getting started with OpenGL but his source is very amateur (he admits this) and shouldn't be copy-pasted verbatim. http://www.opengl.org/code/ and http://www.opengl.org/sdk/docs/man/ are good places to visit once you have a feel for the API.
Disclaimer
On July 09 2010 03:24 mmp wrote:
[E]ven if you understand the material presented in these sites, it does not qualify what you can learn in a 4-year college program or an internship with regards to design & architecture. Anyone can write bad code, but it takes experience and some peer oversight to develop serious programs. That said, learning the basics is so easy that any motivated TL member can be writing cool & useful programs.
[E]ven if you understand the material presented in these sites, it does not qualify what you can learn in a 4-year college program or an internship with regards to design & architecture. Anyone can write bad code, but it takes experience and some peer oversight to develop serious programs. That said, learning the basics is so easy that any motivated TL member can be writing cool & useful programs.
Above quote slightly altered (typo+editing). Doing something fun and cool with any language usually doesn't require too much work. Doing something fun and cool and productive and useful and WELL can be extremely hard (and usually is). You will have problems with your code, it's just a part of being a programmer. Don't get frustrated over it.