Announcement

Collapse
No announcement yet.

Becoming a programming Guru.

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Becoming a programming Guru.

    Here's a brief overview:
    I've been working full time in the "real world" for 6 months now developing applications in ASP and VB. It's been over a week now since I've quit my job (long story, PM me if you are really interested!) but I've also been accepted into Graduate School for Software Engineering and I start in January. I've been waived for all the prerequisite classes (mostly consisting of programming 101), but I want to spend the rest of my new found time getting back into some serious object oriented design.

    P.S. 3 tries to OCS and 2 tries to OTS = 5 times rejected to service as an officer.

    The problem:
    I understand all the concepts of object oriented design, but I've found little in terms of practice or implementation. Even my old text books (c++) don't give much info on advanced concepts other then "here's a cool feature that you can use but we won't tell you more about it beyond the fact that it exists". I know c++/java and I've worked with a lot of scripted languages and built simple objects and class structures. But then I go look at the source for HL/HL2/Q3 and I sit back trying to figure out just wtf is going on.

    Am I going to find anything on the internet (tutorials/articles) or at the bookstore that's going to give me an edge programming wise or is this entirely a "break something and learn" process? All I've found so far are introductory to intermediate tutorials/articles that cover the basics to some stuff that's way beyond my understanding right now (see: nothing in between).
    USAR

  • #2
    Re: Becoming a programming Guru.

    Squeak.. I'm glad you posted this because I was actually about to post an entirely new thread on what IMO is the absolute BEST and EASIEST way to get into programming (game design at that). Aside from that, I think it's a good idea if we get Apophis to build a Game/Software Development forum.

    Anyways... for programming, C# is the language to beat right now for a myriad of reasons you'll come to appreciate when you learn more about the language. In the oldendays it was a bit clunky because the hardware wasnt up to the task (it's not as fast as C++ of course), but this isnt the case now. I know I can get flamed for saying this stuff but oh well. Coming from a beginner's standpoint I think it rox. Also, you'll find many software-houses are pouring money into training for C# now.

    One of the best sources for learning the language IMO:
    www.learnvisualstudio.net (I have many of their videos) They've got vids. for varying skill levels and they're reasonably priced. They cover other languages besides C# also.

    If you want to learn C# AND learn the new XNA Framework so you can make games:
    www.3dbuzz.com (they've got an ongoing XNA course right now. Volume 1 goes really in-depth into C#. You can stay away from vols. 2 and 3 I think if you're not interested in XNA. BUT, if you're looking for a solution to your particular problem with putting things into practice and implementation then I think that the entire XNA course is definitely for you.

    Also, www.3dbuzz.com has other videos available... like for C++, HL2 level design, and a MILLION others. Just check it out... trust me.

    I've found most of the books on OOB suck. Videos are the way to go - point blank. Only use the books for referencing material if needed. The best book option though is to simply buy a coursebook (outdated of course). Prentice-Hall has some good ones. If you dont want something 800 pages thick, then SAM's "----- in 24hrs" books are really good.


    In a nutshell 3dbuzz is about the best knowledge-provider for digital arts that I've ever seen. I absolutely love the way they teach and the sheer VOLUME of info. they provide is mind-blowing.

    For all you aspiring game designers/programmers out there, this is the combo. of choice:

    1) XNA 101 Extreme class from 3dbuzz (via Visual Studio '05)
    2) XSI Mod Tools (via Softimage's XSI 6.0) also videos from 3dbuzz and Noesis Interactive for this.
    3) BodyPaint 3D (if you've got money to burn - $900)

    The only thing to pay for here is the Xtreme class ($50 to start). Visual Studio and XSI Mod Tools are completely free and easy to use; right now they're also the most powerful IDE and 3DModeller/Animator available. BodyPaint is just so you can literally PAINT textures right on your models and easily import/export them (no 2d editor needed)... it's a powerful piece of software.

    With those 3 things you can literally make just about any game in much less time it'd normally take to do-so.

    Comment


    • #3
      Re: Becoming a programming Guru.

      For me, it's always been about having a goal.
      For some simple goals that will keep your brain sharp, try:

      http://uselesspython.com/pythonchallenges.php
      http://uselesspython.com/pythonchallenge.html

      They've got Python in mind, but the exercises can be done in any language.
      [volun2]
      NS Game Officer. TF2 Admin. BF2 Admin / Scripter. PM with issues.
      Tempus: Pokerface is nailing it right on the head. Everyone who is arguing against him is simply arguing against reality.
      <anmuzi> it is not permitted to have privacy or anonymity
      <LazyEye> yeah when I play on TG the server digs though my trash

      Arm yourself with knowledge: TG NS TF2 BF2

      Comment


      • #4
        Re: Becoming a programming Guru.

        The first thing to remember is that Objects are defined by their behavior not data.

        Second thing to remember is that inheritance is often overused. Use it sparingly.

        Single Responsibility Principle (Fowler et el) is so important to understand but is kinda hard to understand. VB.Net is just as capable as c# with one or two exceptions. But then again VB.Net has some cool stuff that c# doesn't have. It comes down to preference.

        C# is not the cats pajamas. It is the .Net framework that is the cats pajamas.

        Over the past to years I have come a long way with my OOD/OOP understanding and ability. I have a long way to go but that will, hopefully, always be the case.

        Any specific questions?
        Iím not racists, I have republican friends. Radio show host.
        - "The essence of tyranny is the denial of complexity". -Jacob Burkhardt
        - "A foolish consistency is the hobgoblin of little minds" - Emerson
        - "People should not be afraid of it's government, government should be afraid of it's People." - Line from V for Vendetta
        - If software were as unreliable as economic theory, there wouldn't be a plane made of anything other than paper that could get off the ground. Jim Fawcette
        - "Let me now state what seems to me the decisive objection to any conservatism which deserves to be called such. It is that by its very nature it cannot offer an alternative to the direction in which we are moving." -Friedrich Hayek
        - "Don't waist your time on me your already the voice inside my head." Blink 182 to my wife

        Comment


        • #5
          Re: Becoming a programming Guru.

          Don't get too bogged down filling your head with specific language syntax. You need to really build a language-neutral foundation of knowledge first.

          Try something like this:

          http://www.amazon.com/Head-First-Obj.../dp/0596008678

          Then take into consideration that almost any problem you might come across in software development has already been picked apart, documented, and solved. Enter Design Patterns:

          http://www.amazon.com/Head-First-Des...599892-1618229

          I would focus on stuff like this rather than specific language syntax.
          2 Legit 2 Quit

          Comment


          • #6
            Re: Becoming a programming Guru.

            Yeah design patterns may be a good start since you already have an understanding of objects. Design Patterns are all laid out as an implementation to assist in a certain design decision. It gives you the basic skeleton of how you can go about solving a specific problem in your system.

            Building a mailing list application that will send an email when a website updates? That's an Observer Pattern.

            Need to implement a new database provider without the client knowing you changed from Oracle to mySQL? That is the Adapter Pattern.

            So forth and so on.

            Of course, one design pattern isn't going to give you a definite answer to all your problems, but it's a good foundation (and as Hidus mentioned, can be used in practically all programming languages).

            Comment


            • #7
              Re: Becoming a programming Guru.

              Practice is the key. Writing code which is entirely your own is the best way to advance your skills. The language is not too important, but I would choose from the C++, C#, or Java group if OO concepts are interesting to you.

              Pick a little pet project, and go to it. Rather than copying from books or getting wrapped up in API details, do your own thing and make some mistakes. Once you have something of your own, you can change it and optimize it.

              If you have good fundamentals, API's and languages are easy to pick up. If you start with a bunch of fancy API's and copy pre-fab code out of books, you aren't learning much. It's like driving a car and hoping to eventually understand how it works. You are better off building a go kart.
              Peace through fear... since 1947!

              Comment


              • #8
                Re: Becoming a programming Guru.

                Originally posted by El_Gringo_Grande View Post
                Single Responsibility Principle (Fowler et el) is so important to understand but is kinda hard to understand. VB.Net is just as capable as c# with one or two exceptions. But then again VB.Net has some cool stuff that c# doesn't have. It comes down to preference.

                Any specific questions?
                Could you elaborate on that, or point me to a resource you would recommend on that?

                Originally posted by Hidus View Post
                Don't get too bogged down filling your head with specific language syntax. You need to really build a language-neutral foundation of knowledge first.

                Try something like this:

                http://www.amazon.com/Head-First-Obj.../dp/0596008678

                Then take into consideration that almost any problem you might come across in software development has already been picked apart, documented, and solved. Enter Design Patterns:

                http://www.amazon.com/Head-First-Des...599892-1618229

                I would focus on stuff like this rather than specific language syntax.
                I actually already own and have read the first Head First Object book.


                Thank you for the replies guys, I appreciate the input. We should keep this thread a rolling, seeing as we could probably offer up a lot from the pool of programming geeks here.
                USAR

                Comment


                • #9
                  Re: Becoming a programming Guru.

                  I'm in agreement with El_Gringo about C# not being the cat's meow, but .NET actually being the cat's meow. I shoulda been more general with my statement. IMO, ANY language that's .NET compliant is a good thing to learn. I like C# personally because it was written specifically for .NET, it's case-specific, there isnt much syntax to learn, and the parent IDE is awesome.
                  Thing with C# though is you get the XNA framework to play with. And if you're a console geek that's a powerful draw. Also, VS 2008 is shaping up to be even better then '05.
                  But anyways, your post wasnt about which language, but how to use it; and IMO designing small games is a great AND fun way to practice coding.
                  Designing calculators, calendars, and apps that'll put your .mp3 into alphabetical order are COOL, but just aint FUN.

                  Comment


                  • #10
                    Re: Becoming a programming Guru.

                    Originally posted by Gambit7 View Post
                    But anyways, your post wasnt about which language, but how to use it; and IMO designing small games is a great AND fun way to practice coding.
                    My end goal is to get a job locally at Midway Games as a game programmer.
                    USAR

                    Comment


                    • #11
                      Re: Becoming a programming Guru.

                      Single Responsibility Principle SRP.

                      First it wasn't Fowler. It was Martin et al in Agile Software Development, principle patterns and practices. A book I highly recommend.

                      SRP = "A class has only one responsibility." And Martin changes that to "A class should have only one reason to change."

                      They are related. For each responsibility a class has is an "axis of change". Every time you have to change a class you open yourself for breaking something someplace else.

                      Programming is, above all else, complexity management. One of the best way I have found of doing this is have small classes that do one thing well.

                      Icky is right. Practice is key. It is like carpentry. You may understand the concepts building custom cabinets but until you screw up a few hundred you don't know how to build them.

                      To illistrate this another princible noted by Martin is the Dependency Inversion Princible. This says that High-Level modules should not depend on Low-Level modules. Interfaces and abstract classes are important in this. But knowing when to use an interface or a abstract class is really only learned through experiance. This is something I am still getting bitten by. And some times it is because I am creating an interface when one is not needed. I have seen a project or two where everything is a interface. It all sounds cool but try following and debuging a complex app where every thing is an interface. Some interface where five level deep in the inheritance! Not fun.

                      One book I would recomend is David Wests "Object Thinking". You have to get over the hippy-touchy-feely tone of it but it is a very good overview of what OOP/OOD is.
                      Iím not racists, I have republican friends. Radio show host.
                      - "The essence of tyranny is the denial of complexity". -Jacob Burkhardt
                      - "A foolish consistency is the hobgoblin of little minds" - Emerson
                      - "People should not be afraid of it's government, government should be afraid of it's People." - Line from V for Vendetta
                      - If software were as unreliable as economic theory, there wouldn't be a plane made of anything other than paper that could get off the ground. Jim Fawcette
                      - "Let me now state what seems to me the decisive objection to any conservatism which deserves to be called such. It is that by its very nature it cannot offer an alternative to the direction in which we are moving." -Friedrich Hayek
                      - "Don't waist your time on me your already the voice inside my head." Blink 182 to my wife

                      Comment


                      • #12
                        Re: Becoming a programming Guru.

                        Practice is helpful but you have to concentrate on practicing OOP concepts. Know when to create a base abstract class and when to create a completely new class that doesn't extend another class.

                        Like Zoopy says, design patterns are good. They solve a lot of common problems in software design. Know when to use a pattern and which pattern to use. Sometimes you just use them and don't even realize it.

                        I wouldn't say there's a requirement to focus on a particular language. Although, I still think a lot of games are centered around C++. A friend was hired on internship at EA games and his interview was about C++. It still doesn't matter because a language is a language. The software design concepts are transferrable across languages. In the end, you'll realize that most programming languages are very similar and the proficiency in a language comes from becoming comfortable with a particular IDE.

                        - It's who you game with.

                        Comment


                        • #13
                          Re: Becoming a programming Guru.

                          I got a taste of CTS and CLI last night, along with a bit more in-depth look at .NET. Talk about COMPLICATED. Also learning about JITing and the CLR was pretty cool. There are volumes on all this crap, but it's helpful to learn how machine codes ends up as jo-blo's .exe and what happens when he runs it.

                          I'm a newb, but it feels like knowing all the nuts and bolts helps make more sleak, efficient code. Like certain structures JIT easier then others, to the point of even being faster then a prog. optimized for one particular system.

                          Comment


                          • #14
                            Re: Becoming a programming Guru.

                            Originally posted by squeak View Post
                            My end goal is to get a job locally at Midway Games as a game programmer.
                            Well, there you go then.
                            Make some damned games. Here's a site I used to fool with (once I'm done learning, I'll get back into the loop):
                            http://www.experimentalgameplay.com/

                            A lot of people have actually gotten jobs from that website, because people learn how to make super-efficient code. "Will Wright" style basically. Check out the scandinavian "demo" scene for some other nice examples. Usually all this stuff is Open Source, so you can pour into their codes to see what makes em tick and change them at will.

                            And again, I still recommend C# (in your case) and XNA with XSI Mod Tools (which also codes in C#) if you want a "quick and painless" (relatively speaking), totally OOP game-designing experience. The documentation and tutorials just can't be beat, even by Python standards (which has a great community). Since you're already C++ and Java-capable it should be a piece-of-cake. Maybe skip to 3dbuzz's XNA 101 Vol. 2, or about halfway through vol. 1.

                            It aint the be-all-end-all and I'm sure there are better ways to learn, but try it... you may like it. If you just want to focus on C++, then get their C++ course.

                            Comment


                            • #15
                              Re: Becoming a programming Guru.

                              Originally posted by =Sarc= View Post
                              Practice is helpful but you have to concentrate on practicing OOP concepts. Know when to create a base abstract class and when to create a completely new class that doesn't extend another class.
                              But how do you know when to do one or the other (or even that other)? There is no formula. And there are so many ways to implement a design.

                              After about 10 years experience I am starting to know when to do what. Basically it comes down to this. If I am having difficulty implementing something then something is wrong in my design. That has only come through experience. Without experience how do you know if the difficulty is due to general ignorance of the platform/framework/language or the design?

                              Plus I don't think there are universally agreed upon OOP concepts. One of my favorite pod casts is DotNetRocks. You have all kinds of professional, well respected developers coming on that show. And often they disagree on very basic concepts. One group will say design around interfaces (object interfaces). Other will say if you are using interfaces you have a poor design. The others will claim that a good design has only occasional need of interfaces. Some preach the test driven stuff others will say TDD is overkill or a crutch.

                              I believe the truth is between the two exactly but I can't claim to know where, exactly, it is.

                              Originally posted by =Sarc= View Post
                              Like Zoopy says, design patterns are good. Know when to use a pattern and which pattern to use. Sometimes you just use them and don't even realize it.
                              But you have to be careful with them. When you have such fine, pretty hammers everything starts looking like a nail. I remember when I first discovered the strategy and command patterns. For the next three projects every thing magically fit those patterns. And for a long time after I spent much time fixing the pattern craziness.

                              Those are two of my favorite patterns BTW.

                              My most used (not in order)

                              Observer (You can often do the same thing with events. But sometimes using the Observer pattern is much more clear and extensible.)
                              Strategy (I do accounting and student management systems. So it is a natural)
                              Singleton (Very Dangerous if misused. Especially in ASP.Net applications.)
                              Factory Method (I use this extensively. Helps controlling object creation.)
                              Proxy (Very good for handling legacy code or code that is less that OO.)

                              I love the simplicity of the command pattern. And it is powerful. But since I do the middle (business logic) tier I don't have much use for it. Game development, I would bet, would have much use for it.

                              Now, years later, I don't consider any of that a failure because I learned from it. It would have been better if I had learned after just one project but still...

                              And squeak. One thing almost every game I have played is missing a good interface for the mundane aspects of it. For example BF2. The server selection screen is absolutly horrible. And that is something I could do in my sleep. It is such a basic business app requirement. This goes for almost all games that deal with lists of data. So don't ignore what can be learned from "boring" business apps.
                              Iím not racists, I have republican friends. Radio show host.
                              - "The essence of tyranny is the denial of complexity". -Jacob Burkhardt
                              - "A foolish consistency is the hobgoblin of little minds" - Emerson
                              - "People should not be afraid of it's government, government should be afraid of it's People." - Line from V for Vendetta
                              - If software were as unreliable as economic theory, there wouldn't be a plane made of anything other than paper that could get off the ground. Jim Fawcette
                              - "Let me now state what seems to me the decisive objection to any conservatism which deserves to be called such. It is that by its very nature it cannot offer an alternative to the direction in which we are moving." -Friedrich Hayek
                              - "Don't waist your time on me your already the voice inside my head." Blink 182 to my wife

                              Comment

                              Connect

                              Collapse

                              TeamSpeak 3 Server

                              Collapse

                              Advertisement

                              Collapse

                              Twitter Feed

                              Collapse

                              Working...
                              X