Tips for Independent Learning? 56
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?"
Port an existing project you wrote (Score:5, Insightful)
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.)
Re:Port an existing project you wrote (Score:1, Troll)
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
Re:Port an existing project you wrote (Score:2)
Re:Port an existing project you wrote (Score:2)
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 pr
Re:Port an existing project you wrote (Score:1)
Re:Port an existing project you wrote (Score:2, Funny)
Re:Port an existing project you wrote (Score:2)
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.
Re:Read ... (Score:2, Informative)
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.
Re:Read ... (Score:2)
One thing I've done. (Score:5, Insightful)
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.
Re:One thing I've done. (Score:2)
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 [wikipedia.org].
Practical Experience (Score:4, Interesting)
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.
Re:Practical Experience (Score:2)
me too (Score:4, Interesting)
Re:Don't "Ask Slashdot" (Score:5, Insightful)
Step 2, Austin: Ignore the naysayers.
Re:Don't "Ask Slashdot" (Score:2)
Redo a school project (Score:2)
Go work for professor (Score:3, Insightful)
Go around and talk to people. Express interest in what they are doing. Explain your level of skills/need to acquire skills
Contribute to an open source project (Score:3, Informative)
You will increase your skills and you will be contributing to a project that other will benefit from. Every one wins.
Re:Contribute to an open source project (Score:2)
Still, I stand by the open source approach. There are many projects out there of smaller size that may be less intimidating.
Re:Contribute to an open source project (Score:2)
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 [sourceforge.net], http://www.indyproject.org/ [indyproject.org]). You name it, it
Motivation (Score:4, Insightful)
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
Obvious (Score:2)
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
Apprentice yourself (Score:3, Interesting)
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.
Learn to hold the ball before you throw it (Score:3, Insightful)
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
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.
Find.. Scratch.. Itch.. Something like that.. (Score:4, Insightful)
And for that...
http://www.gapingvoid.com/Moveable_Type/archives/
Easier said than done though.
Just do it. (Score:5, 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:
Enjoy your life as a computer science major. It is truly rewarding and interesting. Now I have to return to my own programming assignment....
Re:Just do it. (Score:1)
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.
Save water, shower with a friend (Score:4, Insightful)
Get an internship doing what you want to learn. (Score:3, Insightful)
When you have a hammer... (Score:5, Interesting)
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 [foobarsoft.com].
Trying to do more, I made a simulation (I'd call it a game but it wasn't interactive) called Itty Bitty City [foobarsoft.com] 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 [foobarsoft.com] 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 [foobarsoft.com].
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 [foobarsoft.com]. 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 [foobarsoft.com] 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
Re:When you have a hammer... (Score:2)
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).
Everything is learned outside the classroom (Score:2)
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 a
This was sort of said in the first post but... (Score:2)
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 to
Thoughts (Score:2)
Consider:
But promise me you won't inflict it on the rest of the world.
Re:Thoughts (Score:2)
The problem with contributing to an open source project is that they tend of have any
Intern! (Score:2, Insightful)
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
shareware (Score:2)
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 (an
Not so much an answer... (Score:2, Interesting)
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
Re:Not so much an answer... (Score:2)
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
Re:Not so much an answer... (Score:2)
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 [catb.org]
Teach [norvig.com]
Work (Score:2)
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 sc
Things to learn (Score:1)
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, cod
Meanwhile, in the real world... (Score:2)
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 data
Re:Meanwhile, in the real world... (Score:2)
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 s
google answers for slashcode installation (Score:1)