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?"

56 comments

  1. Rewrite a closed source tool. by Anonymous Coward · · Score: 0

    Start with yProxy...

  2. Get a job by Anonymous Coward · · Score: 0

    And if you are not learning stuff there, toss it and get another one.

    Should holding down a part-time intern/development position be impossible for you while you are in school, get on rentacoder.com or similar sites and learn by doing shorter projects for other people. Eventually you will have your own ideas. The first ones are likely to be systems for keeping track of billing and worked hours.

  3. 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 =
    1. Re:Port an existing project you wrote by 4D6963 · · Score: 0, Troll
      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.

      Funny, that made me remember that without meaning to do that I did that everytime I learnt a new language. Everytime I tried porting a simple message encrypting program that I did in BASIC on a children portable computer (those with a B&W screen of 20x2) when I was 13-14.

      It's actually a pretty good way to compare and understand the differences between two different languages (such as the handling of arrays, function arguments and pointers, indexing, memory allocation, strings etc..)

      --
      You just got troll'd!
    2. Re:Port an existing project you wrote by VernonNemitz · · Score: 1

      A simple game can also be a good thing to write. My choice was "Master Mind". No matter what language you write it in, you need to construct a user interface and behind-the-scenes functionality. You will learn most of what you need to write anything else in that language. Over the years I wrote my chosen game program in "Color BASIC" (Radio Shack TRS-80 Color Computer), GWBASIC for MS-DOS, Clipper (DOS), C (DOS), Delphi (Windows), C (Windows), and JavaScript. Today I work full-time programming in Delphi. Here is the JavaScript version, built into a Web page that can be saved; you don't need to be connected to the Internet to load it up and play it. So, pick some simple game and have fun learning a new computer language (and you get to have fun playing the game, too).

    3. Re:Port an existing project you wrote by hayriye · · Score: 2, Funny
      I pick out a simple project that I have already written in a known environment and port it to the new system.
      For example, port your HelloWorld application.
    4. Re:Port an existing project you wrote by thc69 · · Score: 1
      Everytime I tried porting a simple message encrypting program that I did in BASIC on a children portable computer (those with a B&W screen of 20x2) when I was 13-14.
      Was it a VTech PreComputer [1|2|x]000? I wonder how many geeks had one and were encouraged by it, and how many parents said "That doesn't look like a fun toy, we'll get him a Nintendo" whose children _could_ have been geeks?

      I wonder what ever happened to mine...I'm going to assume that I got tired of mine after we got the Applie ][gs, and proceeded to give it an autopsy (probably before it was actually dead).
      --
      Procrastination -- because good things come to those who wait.
    5. Re:Port an existing project you wrote by funpet · · Score: 0

      This is a great method if you're porting between two languages that stress the same paradigm, like an Object Oriented program between two languages that support Object Oriented Programming. However, try translating a C++ program to Scheme, and you'll be ending up being distracted far more than if you just start a new project in Scheme.

    6. Re:Port an existing project you wrote by 4D6963 · · Score: 1

      lol it was VTech Genius LEADER 2000. They didn't even get it for me but for my little sister. Not what made me a geek tho. And I would have been delighted to have been offered a Nintendo instead. Actually a NES with Family BASIC coulda done it I guess.

      --
      You just got troll'd!
    7. Re:Port an existing project you wrote by PylonHead · · Score: 1

      I disagree.

      One of my learning projects was porting a irc bot from java to OCaml. I went from an object oriented paradigm to a functional paradigm. Of course, you have to restructure the architecture, but at least the behavior of the program has been codified, and you don't have to think about it.

      --
      # (/.);;
      - : float -> float -> float =
  4. Read ... by Anonymous Coward · · Score: 0

    magazines, not books, if you want to see more current information. Obviously, web pages
    can be even more current, but keep in mind there is lots of misinformation on the web
    ( hell, this comment could be just that ... )

    Get to know people who are already out there doing what you are interested in. Do things which
    make these people happy to have you pestering them for knowledge.

    Avoid seeking credentials, if knowledge is what you really seek.

    1. Re:Read ... by afaik_ianal · · Score: 2, Informative

      magazines, not books

      Although it is worth noting that books can be an excellent initial source of information when learning many technologies, particularly the larger technologies.

      Books tend to give broader coverage of the area you are interested in.

      Once you have gained some generally knowledge and understanding in an area, magazines are great for drilling into specialised areas.

    2. Re:Read ... by Schraegstrichpunkt · · Score: 1

      Also keep in mind that there is also lots of misinformation in magazines...

  5. 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
    1. Re:One thing I've done. by gregmac · · Score: 1

      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.

      This is very important. If you don't pick a project that serves a purpose for you in some way, you'll probably lose interest very quickly (especially if you're not getting paid). One of the important points with software development is to eat your own dogfood.

      --
      Speak before you think
  6. Practical Experience by MyLongNickName · · Score: 3, Interesting

    I find the best way to learn is to have a real life project you are working on. Their are too many people in the world with "paper certifications". That is, they can pass a test, but could not do anything with that knowledge in a practical way.

    I am in the process of studying for certifications. Three tests I was ale to pass with mostly work experience. One, I really needed to study... I found excuses to introduce some of the topics into my work. It helped a lot.

    You, likely, are not working in the industry yet. Find a way to work on a real project. It might be one you dream up. It might be working cheap at a local company. I don't really know enough specifics to advise. I'll just say that dreaming up your own project requires a lot of motivation to continue to work on.

    But bottom line, you need to be applying, or it is just book knowledge.

    --
    See my journal for slashdot ID's by year. Mine created in 2005. http://slashdot.org/journal/289875/slashdot-ids-by-year
    1. Re:Practical Experience by Directrix1 · · Score: 1

      I concur with your statements completely. Find something you need, find code you can use, adapt it, post changes back to open source project, get huge ego boost from the gratitude and fuel for further development and self improvement. You are absolutely right, you must find an application or you will not be motivated. You must take an interest to really learn.

      --
      Occam's razor is the blind faith in the natural selection of least resistance and in universal oversimplification. -- EF
  7. me too by bblazer · · Score: 3, Interesting

    I too am an independent learner. Although I have taken several language courses at my local college, I have found them to be limited at best. One thing you might consider is starting a project on sourceforge for something simple. Do you find yourself doing an repetitive tasks that you could write something to automate? Do you have anyone that needs some web development that you could use Ruby on Rails for? There is also TopCoder. They have a lot of coding competitions that you can participate in - many have cash prizes. Although I don't have the links handy, there are also some sites that have student programming project suggestions that you could look at.

    --
    My .bashrc can beat up your .bashrc!
  8. Don't "Ask Slashdot" by slashbob22 · · Score: 0

    The first thing to learn about independent learning is to: not ask the world.

    --
    Proof by very large bribes. QED.
    1. 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.

    2. Re:Don't "Ask Slashdot" by NitsujTPU · · Score: 1

      I disagree with that comment, though I may not choose advice from Slashdot as being a very good source for most things. Quite often, the advice doled out here is just wrong. Everyone wants to comment, even non-experts. I try to avoid it when people are geniunely looking for an answer, but indulge a bit when it's more harmless.

  9. Redo a school project by Cornflake917 · · Score: 1

    I would suggest getting a school project that you enjoyed working on and do the exact same thing with an API that you want to learn. By doing this you can easily compare your new work to your school project to make sure everything is working as expected. You will also quickly learn the advantages and disadvantages of the tools you are using because you will have a 'control on your experiment' so to speak. You will be able to have a more informed opinion on which tool is better for certain situations.

  10. Contribute to an open source project by Zepalesque · · Score: 2, Informative

    There are thousands of them. Find one that uses the APIs/Languages/etc. that you are interested in and then get it source code. Spend time perusing that for a while. Next, look at the open bug list for the project and see if you can delve in an sumbit a patch.

    You will increase your skills and you will be contributing to a project that other will benefit from. Every one wins.

    1. Re:Contribute to an open source project by Zepalesque · · Score: 1

      And now I just read the last few sentenses of your post - oops :)

      Still, I stand by the open source approach. There are many projects out there of smaller size that may be less intimidating.

    2. Re:Contribute to an open source project by Kiaser+Zohsay · · Score: 1

      There are many projects out there of smaller size that may be less intimidating.

      In fact, the smaller the better. Nobody can be expected to dive right into Mozilla or OpenOffice and start fixing bugs, but then nobody has to. Google is your friend. Start with the API/platform/technology that you are interested in, and seach for projects that use it. You can even find projects specific to a particular development tool (http://sourceforge.net/projects/fastmm, http://www.indyproject.org/). You name it, its out there, and it doesn't have to be mainstream to be useful to you.

      --
      I am not your blowing wind, I am the lightning.
  11. Motivation by Mieckowski · · Score: 3, Insightful

    I've made lots of small Cocoa applications on my own, and the two things that have helped me stay motivated on individual projects are:

    1) Keeping them short (1-2 weeks to finish)
    2) Having people to show them to

    So if there is a group on your campus related to Cocoa or .NET programming I would join it. Also, it can be easy to sign up for 1-2 units of individual study credit with a professor if you have a project idea (this is a great excuse to come talk to them during office hours).

  12. Obvious by illuminatedwax · · Score: 1

    You're going to get told this by everyone commenting: do. Just do. You'll pick up on it very fast.

    Second, you have to have some ideas. Don't go out there with the mind set that you have to make something everyone will use. If it can make your life easier or amuse you, that's enough reason to start working on it. Even if software already exists that does what you want, chances are it won't do it specifically enough or it doesn't do it exactly how you want.

    Third, re-write it. If you get something finished, I guarantee you won't be completely happy with the code the first time around. This will teach you a lot about your code.

    Fourth, document it. Maybe this can go before or after three, but you'll learn a lot here, too.

    --
    Did you ever notice that *nix doesn't even cover Linux?
  13. Apprentice yourself by Will+Sargent · · Score: 2, Interesting

    A couple of other people have suggested going to an open source project. I think you should as well. One of the best things that an OSS project will do is show you the true complexity of a working application, as opposed to the theoretical concepts presented in an education.

    You will also learn far more good practices from a well known / respected OSS project than you will in your average organization. I learnt a ton just reading through the Mozilla source code and following how they broke out interfaces and practiced defensive programming.

    Finally, you will have the chance to work with people who need you for something. Programming is very much a team exercise, and you can learn about teamwork as well as programming through the activity. Apprenticing yourself to a senior mentor is a great way to piggyback through your mentor's experience, as long as you have the necessary humility to have your work ripped to shreds...

    Finally, don't sell yourself short. Alan Cox has a story about a random guy who hung out on the Linux IRC channel until someone told him to make himself useful. He ended up writing most of the IPv6 stack.

  14. Learn to hold the ball before you throw it by Opportunist · · Score: 2, Insightful

    It's not the answer you're looking for, but after trying what you're about to try myself and fail at it, I can only give you the advice to learn the basics before trying to do more than tiny projects. Anything else leads to frustration.

    It might seem pointless to do the projects you're now doing in class. But those are the tools that give you later the ability to pick up anything coming your way. Technology changes fast. And people make the mistake to dig into the tech without learning the basics. 10 years ago it was RAD tools. 5 years ago everyone went crazy about Corba. Now it's .net. What is it going to be in 5 years? Nobody knows.

    But when you have the ability to understand new technology quickly, you're already ahead of those that only learned a certain technology and don't understand the wiring under the board. Learn to understand that instead of hunting some specific implementation that's most likely outdated before you understand it if you don't have the foundation to learn it quickly.

    --
    We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
  15. Find.. Scratch.. Itch.. Something like that.. by EMIce · · Score: 3, Insightful

    Yada yada yada.. And I'm not talking about your balls. You will need creativity.

    And for that...

    http://www.gapingvoid.com/Moveable_Type/archives/0 00932.html

    Easier said than done though.

    1. Re:Find.. Scratch.. Itch.. Something like that.. by Anonymous Coward · · Score: 0

      Would you like to scratch my balls?

  16. 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....

    1. Re:Just do it. by ignavusinfo · · Score: 1
      > Research APIs. What platforms are they used for? What are the strengths-weaknesses of the APIs?

      better still, implement an API. pick an RFC and hack away. reading the RFC as a spec and implementing it in full is a decent challenge. when you're done, release it to the world and take the comments people send you seriously.

      k.

  17. Save water, shower with a friend by An+Onerous+Coward · · Score: 3, Insightful

    If you find it hard to keep yourself motivated on a project, one solution is to pair up with someone who shares your interest in the project. Admittedly, it's not always easy to find someone with similar interests and complementary skills. But if you do, having another person to bat around ideas with can be a wonderful experience.

    --

    You want the truthiness? You can't handle the truthiness!

  18. Get an internship doing what you want to learn. by Rimbo · · Score: 2, Insightful

    The work experience itself is worth several years' worth of graduate school.

  19. When you have a hammer... by MBCook · · Score: 4, Interesting
    ... everything looks like a nail.

    I'm sure you've heard that one before, and you need to be careful of it. That said, you found yourself a hammer (your new knowledge of whatever) so start looking for nails.

    I've run into the same problem many times. I understand not wanting to re-implement things (I thought about making an accounting program for a little bit before deciding to just use Quicken, for example). But you need to be creative.

    When I first learned Python I made a simple little game based on one of my favorite games that I used to play on my TI-85. This also let me learn OpenGL. The game was Blocks.

    Trying to do more, I made a simulation (I'd call it a game but it wasn't interactive) called Itty Bitty City which also included more OpenGL. It wasn't too complex but was fun to watch (even if I did have Pie-In-The-Sky ideas about what it would do as usual).

    I never updated my website because it was a hassle. I didn't want to do it in DreamWeaver or something like that. I wanted to automate things. Python was my favorite language at the time, so I wrote a little program I called SiteMaker to do it for me (ironically, that page is quite out of date). Python was rather well suited to that (it was command line, and needed good text processing) so I used it and gained a good knowledge of Python in the process (including the build-in modules you can use to open and send data across FTP connections).

    After that I wanted a program to make it easier to make blog style entries on my website (which would call SiteMaker). I had been wanting to learn Objective-C for use on my Mac so I used that for the project and it was fun, and I learned quite a bit (even if I don't use the program because I didn't add enough features to make it useful). This was SiteBlogger.

    When I wanted to learn Java 5 to get back into it (since it had features that fixed my biggest gripes) I made another simple game (which I took rather far) called Pond Game. I got to use all sorts of stuff in Java and got a good working knowledge (after quite a bit of time off).

    I was still weak in GUIs in Java (have done no Java GUI programming ever) so I used Java to scratch a major itch I had and made Scheduler which I am now updating for a Senior Project. I learned how GUIs were done in Java and got an even deeper understanding of Java from this project. It also fixed my problem of hating to figure out a school schedule.

    I had been wanting to learn PHP, so when a project came up at school to build a system for them (not an assignment, I work there part-time) and they asked me if I wanted to do it, I jumped at the chance to make such a system (which I hadn't done and included a large amount of DB programming) and used PHP (which they were perfectly happy with, and were actually going to suggest).

    There are other little ones here and there. The main point of all this is that most of these didn't bug me enough to make them (Scheduler was the only real problem) but I saw them as opportunities to try out a new language or some such. I've learned to do this because of a problem that I would suffer from which I assume you suffered from: I'm curious and would read about a language or some such but not do anything and thus forget it all. I needed the practice, so I found places to do it. Whether these were things I needed for myself (Scheduler, SiteMaker) or just little games that I wanted to make or to use to try something (Blocks which was an OpenGL test, Itty Bitty Citty which was going to be an AI test).

    My last suggestion would be to enter a programming contest. I've been enterin

    --
    Comment forecast: Bits of genius surrounded by a sea of mediocrity.
    1. Re:When you have a hammer... by Anonymous Coward · · Score: 0

      I just came back from your website. Why don't you write yourself a Morse Code/CW tutor program? You apparently want one (as gadget, though ...) to learn to operate CW and (as it is one of my usual toy programs) I can assure you writing one would be fun.

    2. Re:When you have a hammer... by MBCook · · Score: 1
      That would be interesting. I may do that for sending practice (but then again there are a million of those).

      I bought a MFJ Morse Code Tutor with a little LCD and I have been using it during free time at my school. I've learned the full alphabet and I'm working on the numbers right now, after that I just have puncutaion and prosigns (AK, BK, etc).

      --
      Comment forecast: Bits of genius surrounded by a sea of mediocrity.
  20. It's a joke, you Stupid! by Anonymous Coward · · Score: 0, Redundant

    It's supposed to be fun for someone with at least 1 ft of humour.

    Damn, what is that organ inside your skull for? Holding hair?

  21. Everything is learned outside the classroom by cgenman · · Score: 1

    Nearly everything you will need to survive will be learned outside of the classroom. Or at least, many great programmers that I know had to do their most productive learning outside of the classroom.

    It is expected. That's how things work. Pay attention to the O of N stuff in the classroom, but really get down and dirty on your own.

    That having been said, I'd start a few smaller projects that interest you and that have a very limited scale. An end-to-end e-mail system that solves all of the cryptography and accountability problems with the current mail system would be neat, but you'll never finish that for you first project. How about some simple scripts that let you control your home server by sending it e-mail? Your first stuff may get hammered out in a few days, and may not get terribly elegant code. But you'll learn and stay motivated. Be sure to finish your first project before you get bored.

    If games are more of your thing (Go games!) start by creating mods of reasonable scope... Like jousting mods in Counterstrike that propel people forward when they fire their weapons, or simple gravity mods that alter attraction based upon the distance to the ground below. Or to really stay motivated, join a modding team. There is nothing more helpful than a good modding team.

    Whatever it is that you want to do... start by doing it. Nothing in the classroom will really teach you to write scripts to be a sysadmin. Or to write graphics code. Or to control robotics systems in a production envrionment, find real information in databases full of junk, or how to resuscitate someone else's crappy code.

    Find something you like, and figure out how to do it. Sometimes you get lucky and find mentors, but don't expect to find it in a college classroom.

  22. This was sort of said in the first post but... by rocjoe71 · · Score: 1
    Sort of what the first post was saying, but instead of porting source code you have already, try duplicating stuff that you see around already. Browse through a magazine or tucows.com and you'll notice some software ad that make you think: "I could do that" or "How would I do that?".

    This is a really handy soft skill because so many employers are going to tell you what they want without being able to provide anything technical-- learning to analyze features from the outside-in will help develop the mental tools you'll need to deal with the non-technical types and that can really pay off.

    --
    Height: 38U, Weight: 0 Newtons, Eyes: #0000FF, OS: Gray Matter 1.0 (Alpha)
  23. Go work for professor by Latent+Heat · · Score: 2, Insightful
    There is always some lab or professor who needs some software design and coding to do something -- to automate a lab, to analyze data, to conduct an experiment, to produce a software package to share with other universities. You may even advertise interest/skills in something off the main track -- Cocoa for example -- there may be some faculty member who needs the app done for OS X.

    Go around and talk to people. Express interest in what they are doing. Explain your level of skills/need to acquire skills, describe something you have already done and how you went about doing it.

  24. Thoughts by Jerf · · Score: 1
    There are a number of projects you can do that are easy, have good payoff, and will teach you a lot.

    Consider:
    • Web content management system. Good returns for modest effort, a gradual introduction to problems with a good ability to fix them, and it's a project you might keep working on for a few years so you get that lived-in experience.
       
      But promise me you won't inflict it on the rest of the world.
    • There are any number of small games you can write in a reasonable amount of time. Don't try to be too original the first time. You can also learn how subtle UI can be, as with games the difference between "nice technical demo" and "fun game" can literally be in the milliseconds.
       
      Do not attempt a Roguelike from scratch. Pick up Angband and mod it, maybe, but don't start one from scratch. A lot of people make this mistake, but to make any decent Roguelike from scratch requires some algorithms and design experience you don't have yet.
    • A text editor can be educational too. Again, promise me not to share it.
    • Look at all the open-source software you use. Pick one to work on that you know, isn't Apache. A lot of open source projects have one or a very small handful of people, and you can both get into them in a reasonable amount of time, and actually contribute.
    Once you've got a couple of things under your belt, you'll find all kinds of things to do. But when you're young, it's hard to know what you're even capable of. Any of these projects will be a good start.
    1. Re:Thoughts by thc69 · · Score: 1

      I have pretty much the same issue as Austin (the asker) -- it's very hard to get motivated to write something that already exists and doesn't suck; and it's hard to dig in to a big, scary open source project. I think I remember a similar Ask Slashdot recently, to which I probably posted a message similar to this one; and shortly before that, I spent a couple days drilling down in old Ask Slashdots for this information, too.

      The problem with contributing to an open source project is that they tend of have any or all of the following pieces of intimidation:
        -humongous size (OpenOffice, Mozilla, etc); this is usually coupled with:
        -hard to determine what's an easy piece to work on -- you look in the bug tracker and see a lot of stuff that looks really hard because it's usually:
        -too deep or advanced -- whether it's a bug from a big project, or it's a small project that's not already done, the work to do is generally something involving scary system calls that mess with your flash BIOS, or maybe involving some obscure algorithm for changing the sound shaping of vbr mp3s, or whatever else

      It's hard to find something that looks workable to a newbie coder that's a stepping stone between school textbook one-hour-work examples and major scary stuff. I've taken courses in C++, Java, Javascript, I Don't Remember What Other Languages, QuickBasic (all in that order), and am currently taking Visual Basic.Net. At this point, I'm pretty agnostic about my languages; I'm comfortable writing the same types of programs in any of the above languages, or even in a new language that I haven't been taught...but I can't figure out where to start to go further.

      One idea is to work on stuff that will help you at work (if you have a job).

      I decided today that I'm going to write a program to take a .csv, sort the data, and print it in my desired format (QuickBooks Pro is surprisingly limited in it's ability to sort data and print it to a third party's specifications); and I also decided I'd write a program (for my VB.Net class project, as well as for work) that can validate vendors' statements against the invoices they've issued to us. These are, at least, tasks that aren't done by existing programs quite the way I need them done, and are too much work to string together macros in existing software when compared to writing a program and getting some practice as a fringe benefit.

      I feel 100% confident and even comfortable with writing these. That's not going to be a big help at all! It will get me some practice with stuff I already know, but it scarcely even qualifies as a "baby step". I don't want to take baby steps; I also don't want to bite off more than I can chew.

      So, the question can be asked in a different way: Where can an educated but inexperienced coder find varying sizes and complexities of stuff that actually needs to get done?

      Your suggestions:
        -A web content management system is actually a decent idea. I've never seen one that doesn't suck that I can figure out how to use given the amount of patience I have available, although I haven't tried hard to find one either.
        -Writing a small game is actually a usable idea -- dig out a dusty board game from the closet that you can't find a decent computer version of, and write it. Also, it could be fun to write a somewhat modernized version of an old but obscure computer game (BBS door games, for example, or old RPGs such as my favorite, "Buck Rogers: Matrix Cubed")
        -A text editor is quite educational, but the motivation would be hard to find. There's just so damn many great open source text editors that I'd never get started writing one.
        -Open source projects -- well, I addressed those above.

      Maybe some project admins can email folks like me and Austin to say "We've got some work that needs to be done; if you do it, then the rest of us can work on the harder parts" or whatever.

      For that matter, maybe I should try to start a forum somewhere, where project admins can post that sort of thing to be taken up by newbie coders...unless such a forum already exists. Any ideas?

      --
      Procrastination -- because good things come to those who wait.
  25. Intern! by MrBugSentry · · Score: 2, Insightful

    Get yourself working for a company for the summer. Accept just enough pay to keep a roof (maybe even your parent's) over your head and to keep you in beer and skittles. In exchange learn how to actually do the job you think you are training for.

    By no means accept just any internship. Even if you like the name on the door, do your research. The best way to do this is to get clear in your own mind what you want to learn before you apply for the internship. Go into the interview with a plan and see if the company can provide what you want. Sometimes the right answer is a huge firm with formal mentoring. Sometimes the answer is a tiny firm where they will accomodate your individual needs and talents.

    We try to give our interns real for profit projects or at least internal projects. Nobody is well paid, but they learn a lot. They tell us that in their exit interviews and their code sure looks a lot better in August than it did in June!

  26. shareware by BortQ · · Score: 1
    When I was in university I wrote a simple little Risk style game, and eventually I released it as shareware. If you want to get a real idea of a full software lifecycle then releasing a shareware product will definitely show you the full spectrum. (An open source product might also, but there's no fire under your ass like that of paying customers).

    After a few years of updates and improvements (and graduation), it became my full-time job! So I would recommend this to you. Create a real product that you (and others) will use.

    --

    A Multiplayer Strategy Game for Mac OS X, Windows, and Linux
  27. Not so much an answer... by Silicon+Jedi · · Score: 2, Interesting
    This is not so much an answer as a semi-related question.

    What should you do when you've gone through school and NOT done what Austin suggests?

    Here is my story:

    I went to school, having no clue what I wanted to do.
    I figured out I LOVED coding, (yeah, doing it since age 7 kinda makes you like it...) and tried to make it my goal.
    I got distracted by a lot of stuff, (Kicked out of house, working min. wage job because I couldn't network to save my life...) kinda fizzled out in the middle of my education.
    I knew how to program, but had no idea how it actually worked in the real world.
    After barely doing enough coding to pass my classes, got two programming jobs that I bombed out of cause I couldn't develop the social or organizational skills to either do the job or get help.
    Working retail like 4 billion hours a week to survive, I squeeze out graduation and barely stay above water for a few years.



    Now I finally recover my wits, (I had some legit mental health issues that are now more resolved.) I am faced with this quandary.

    What next?

    Right now, I finally have a somewhat computery job, doing consumer tech support for a major ISP, but the pay is garbage and there is no mental challenge.

    My resume is a nightmare. I have little definable real-world programming experience, and my coding is rusty to boot.

    Is it possible to break into real programming jobs later on in life? I feel 10 years late for the prom.

    I figure I either need to come up with the plan from hell to make me a paid software developer in two years or I gotta find something else.

    So if anyone has any ideas?

    If there are other IT paths people could suggest I'm interested too.

    (Right now my best solution is trying to go back to school to become a teacher, but I haven't given up on "DO" yet...)

    1. Re:Not so much an answer... by dodobh · · Score: 1

      It is perfectly possible to break into programming later. You are working for an ISP. See if you can move laterally into Sysadmin/Networking. Sysadmin tends to offer more programming opportunities, networking a bit less. These won't be complex programs, but you will be a far better programmer for knowing the admin skills.

      You might find that these jobs suck, but last through them for a year or two. Once you get past the crappy "create user accounts and take backups" part of the job, you will find plenty of opportunities for automation. Code up your solutions.

      Also, join a few related mailing lists. You not only stay informed, but you also get to "network" with people. The more you help, the more respect you get and the more you learn.

      At this point, you know how to code, how to debug, what limitations you have to live with in implementation, what information is good for debugging and what isn't, how to design to scaleup, what security issues you need to worry about, what documentation is needed....

      Oh, and you won't be writing crappy business applications either during these three or four years while you increase your skillsets.

      Good luck.

      --
      I can throw myself at the ground, and miss.
    2. Re:Not so much an answer... by brainstyle · · Score: 1

      I'm a largely self-taught programmer (I have a pure mathematics background - no programming required!) currently working at a top software company. I got here largely because of the initiative I showed working on personal projects. So I think the best thing to do for you would be to pick a project you find interesting, and implement it at home. Having something solid you can point to and say, "I did that," can be pretty persuasive.

      A few links you might be interested in:

      How To Become A Hacker

      Teach Yourself Programming in Ten Years

      Hope this helps!

      --
      "Why can't everyone just be straight with me?"
      "Because we live in a bendy world, dear."
  28. On being original. by Anonymous Coward · · Score: 0

    Innovation is continuous. That is to say that you don't have to have an original idea to begin with as long as you keep asking if there's a better way of doing things or functionalities that can be added. This is a problem that plauged me until I realized that it doesn't matter that much. So basically just do it. If you have an idea for a project you'll find theres lots of new stuff to be done once you're in the thick of it. Otherwise look at other people's projects and see if there's anything you can innovate there.

  29. Work by Hard_Code · · Score: 1

    "What have many Slashdot readers done to gain experience with tools not taught inside the classroom?"

    I find money is a good motivation. Find a job that gives you room to learn (or in fact demands that you learn). Most CS, even most of the theory, can be readily learned from textbooks. The professors are just reiterating the textbook to you. The computer and manuals are the only tools you need, and presuming you actually have access to a computer all the other stuff is dirt cheap (compared to physical sciences...).

    --

    It's 10 PM. Do you know if you're un-American?
  30. Things to learn by porsche911 · · Score: 1

    1. make sure you really understand the fundamentals of computer science. once you get the foundations really captured you will be able to learn a new technology pretty quickly.

    2. don't make the mistake of believing that your technical skills will keep you employeed. as important as they are they are only about 30% of what you need on a daily basis to survive.

    3. instead of doing "toy" problems to learn a language or an api, try doing an "end-to-end" project. write user requirements, do a detailed design, code, write formal test cases, use a configuration management system.

    4. start defining your "personal process". use something like the SEI's Personal Software Process model.

    good luck

  31. Meanwhile, in the real world... by cr0sh · · Score: 1

    I find it difficult to maintain motivation developing software that there are already excellent alternatives to

    Once you get into the "real world", you will find that your statement above is ultimately false.

    I have been programming "out here" for about 15 years now. Not as long as some, but long enough. What I have seen continues to astound me.

    The worst? The number of companies that continue to "reinvent the wheel", and do so each time badly. A big one is "data conversion", the converting of data (in a database, flat files, etc) from one formatting convention to another. This is something that is extremely useful, wanted by about every company out there, and they pay big bucks for it - most of the time to the vendor they are moving to (who invariably writes "one shot" conversion tools, thanks to the myriad of proprietary undocumented formatting schemes dreamed up by vertical market vendors).

    One of the big pushes in an attempt to alleviate this problem was to move to create interfaces to communicate to the "outside world", using what became known as EDI. Good in theory, a nightmare to develop for. Standards were drawn up (and you had to pay for them, unless you coded to the drafts) by the UCC and other bodies. Ultimately, companies ended up extended and fragmenting the standards, so you never really knew what you got was what you wanted, and what you sent was what was needed. Things were still "flat files", but at least in a "semi-documented" (if not always rigidly followed) format. Various GUI-based tools and such were created to work with and develop conversion between the EDI "standard" and the actual needed format (for each implementation). It was a little better. Then XML came along - we all know how that turned out.

    I am not saying any of these things are bad. All of them had their good points, and all are still used. What I am saying is that there is still a need for all of this. If you can come up with a tool or toolset to allow you to set up conversion templates from any format to any format, and sell it cheap, you could make a fortune. Yes, there are other companies that have attempted to do this, all to varying degrees of success. It isn't glamorous or anything, but it is something that companies pay for, and would make a good project to enhance your skills. You can't do any worse than the previous guy.

    I can think of numerous other projects you could work on for which there aren't good solutions for certain target markets. For example, if you did what Peoplesoft (Oracle, now) does, and you did it better (probably not too hard to do, given what I have heard from every user of their software solutions), and cheaper (ie, so small to medium sized businesses could afford it), you would have people beating down your door. Once again, this isn't glamorous or sexy software, but companies pay for it through the nose. On a similar note - a low cost, very easy to use and develop for reporting (business intelligence) package, on the near-level to Actuate's software (good luck here - they know their stuff, and have great support to boot), would also be a boon to business. The two big players are Actuate and Crystal, but there are others. Either of these type of projects would be great to develop and learn from, and might lead to excellent business opportunities.

    Finally, something else that is not quite "needed", but is a currently niche market that needs lower cost alternatives. This area is the "personal fabrication" and "rapid prototyping" market. A complete, but very easy to use end-to-end solution is needed. Right now, you buy your fabricators from one vendor (or your custom build your own) and software from another (or use various open-source solutions), and depending on what you are using, things may "snap together", or they may need some "customizing" to get them to work. Even once you have the toolset down, you still need to use generally arcane CAD/CAM software to design your parts, then convert that using other tools (which may be a part of the set or external to

    --
    Reason is the Path to God - Anon
    1. Re:Meanwhile, in the real world... by thc69 · · Score: 1
      If you can come up with a tool or toolset to allow you to set up conversion templates from any format to any format, and sell it cheap, you could make a fortune. [...] It isn't glamorous or anything, but it is something that companies pay for, and would make a good project to enhance your skills.
      Now THAT sounds like a good suggestion. It sounds like something difficult, but not so terribly intimidating that new coders can't do it. While your whole post seems to be about making money, I'd be willing to try something like this as an open source project. In that format, it may look better on the resume -- and prospective employers can easily and quickly look at your actual code.

      If you felt like you needed to, you could make money on it by offering to write open source plugins for it, for companies that have some oddball format that you haven't written yet.
      if you did what Peoplesoft (Oracle, now) does, and you did it better, and cheaper, you would have people beating down your door. Once again, this isn't glamorous or sexy software, but companies pay for it through the nose.
      Egads, man! I don't propose to speak for Austin, but that sounds like one hell of a tall order for a programmer whose biggest project to date was probably a bicycle gear calculator with a GUI for a 5th-credit C++ course.

      You do seem to have a good idea of what's missing out there...got any more suggestions? Maybe you can hit something else that would be useful for somebody like myself or Austin.
      --
      Procrastination -- because good things come to those who wait.
  32. google answers for slashcode installation by tinku99 · · Score: 1

    I tried google answers... let's see if it works for slashcode on ubuntu. http://answers.google.com/answers/threadview?id=71 5917