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?"
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 =
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
"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.
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:
.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).
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
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.
.net. What is it going to be in 5 years? Nobody knows.
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.
We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
Yada yada yada.. And I'm not talking about your balls. You will need creativity.
0 00932.html
And for that...
http://www.gapingvoid.com/Moveable_Type/archives/
Easier said than done though.
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....
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!
The work experience itself is worth several years' worth of graduate school.
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.
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!