Slashdot Mirror


Tips for Independent Learning?

Austin asks: "As an undergraduate seeking a degree in Computer Science, I am very interested in expanding my programming skills and tools. Much of the platform specific knowledge, such as the usage of unique languages and APIs such as .NET and Cocoa, are rarely taught on an academic level, and independent projects are looking very appealing as a way to broaden my abilities. I find it difficult to maintain motivation developing software that there are already excellent alternatives to, and contributing to mainstream open source projects is an intimidating endeavor due to their size and complexity. What have many Slashdot readers done to gain experience with tools not taught inside the classroom?"

4 of 56 comments (clear)

  1. Port an existing project you wrote by PylonHead · · Score: 5, Insightful

    When I want to learn a new programming environment, I pick out a simple project that I have already written in a known environment and port it to the new system.

    This lets you focus completely on the new environment and not get bogged down in (high level) design decisions. It also gives you an apples to apples comparison in possible strengths and weaknesses of the two systems. (although any first project is likely to miss out on some possible advantages.)

    --
    # (/.);;
    - : float -> float -> float =
  2. One thing I've done. by techno-vampire · · Score: 4, Insightful
    Come up with a small project. If nothing else, a program that does something you want or need done, even if nobody else wants it. Write it, debug it, get it working and add as many or few features as you need. Don't worry if anybody else will ever use it because that's not what it's for. You'd be surprised how much you can learn, just trying to get it right.

    Next, put the code aside; use the program, but don't look at the code for about six months or so, while doing other things. Then, come back, look it over and see if you can improve it. You'll have forgotten how you did things, so this will be similar to maintaining sobody else's code. By the time you're done, it will be better written, easier to understand and probably working better, and you'll have learned quite a bit more.

    --
    Good, inexpensive web hosting
  3. Re:Don't "Ask Slashdot" by afaik_ianal · · Score: 4, Insightful

    "Independent learning" does not exclude asking others for advice. In fact I would say that Austin has already taken the first important step towards gaining the knowledge they seek.

    Step 2, Austin: Ignore the naysayers.

  4. Just do it. by linguae · · Score: 4, Insightful

    I am a freshman computer science student. Here is my advice.

    Remember that a computer science curriculum teaches the theoretical foundations of computer science. You start with basic programming (C, Java, or [if you're really lucky] a functional programming language like Scheme), and then learn about data structures, algorithms, software engineering, architecture, systems programming, OSes, compilers, and theoretical computer science, as well as some CS topics of your choosing (numerical analysis, graphics, more software engineering, AI, etc.). Discrete mathematics is also very important; you can't do much in computer science without it. And don't forget your EE courses like digital design (designing circuits using Boolean logic) and assembly programming; you'll get to know about computers from an electrical engineering standpoint (different, but cool, IMO). As much as I like mathematics and theoretical CS, sometimes you need to get close to and examine the metal. I personally liken computer science, mathematics, and electrical engineering to be the holy trinity of computing, but I might be out there....

    Computer science departments typically do not teach the ins and outs of APIs and industry programming languages unless it ties into learning about the fundamental concepts explained above (Java's usage in CS courses, for example). However, this doesn't stop you from learning these APIs independently. My suggestion are the following:

    1. Research APIs. What platforms are they used for? What are the strengths-weaknesses of the APIs? What languages do they support?
    2. Start with some basic tutorials to get a grasp for the language and/or API.
    3. Start writing programs. You'll have to start small at first, such as older projects. For example, if you wrote a payroll application in C back in CS 101, why don't you reimplement it using Objective-C and Cocoa, along with a slick, shiny, plastic Mac interface? (Any other implementation would do; that is an example)
    4. As your skills get better (and as you start taking more specialized computer science courses), try working on a bigger project. Writing a C compiler for a 16-bit microprocessor that you'll learn in an EE course will surely keep you busy (I haven't written a compiler yet, so I don't know how difficult this is, although this sounds very intersting). Perhaps coding a web browser in C# and .NET is more interesting.
    5. Helpful hint: You might want to focus the skills you want to learn on a project that you would like to build someday. For example, if your dream is to build a small operating system, you will need to learn some assembly language, C (or some other "close to the metal" language), and the architecture that you plan on coding the OS for. Good OS books (like Tanenbaum's book) are also nice to own. Once you figure out learning the basic tools, theories, and practices, then you can start coding a small OS. Once your program is finished and running, then you can add all of the complex features that you like.

    Enjoy your life as a computer science major. It is truly rewarding and interesting. Now I have to return to my own programming assignment....