Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 7 years ago.
Improve this question
Besides practice(practice and more practice) reading books and forums, analyzing others people code is a must in order to have a career in this field.
The problem is that I'm a student(feels like always on learning stage) but sometimes i can't solve the problems by my own. I was thinking that on public open source repositories might be the answer I'm looking for.
My question is how can i find the answer to some of my problems in open source projects/community? Do you have any tips to share for me?
ty
A few things for learning problem solving skills related to software developement (once you've found a project that you are interested in that is also written in a language you feel comfortable with) are:
Sign up to the mailing list
Lurk about on the project's IRC
channel (assuming they have one)
Read through bug repots (the open
ones to try solve them, and the
closed ones to see how others solved
them).
and of course discuss discuss discuss, if you think you have a basic grasp of the problem at hand but need clarification on some issues don't be afraid to ask your peers.
Hope this was of at least some help,
Welcome to the open source world and good luck!
Analyzing others people code is a must... I'm a student... public open source repositories might be the answer?
The problem with open source is that the quality varies too much.
(There's lots of my own code sitting in public open-source repositories that I wouldn't want anyone to try to see, let alone learn from.
And yet some of my code, the code I have lavished time and attention on, is very good—or so my peers tell me.)
So you don't want to pick an open-source project and learn from J. Random Hacker. You want to learn from the best hackers.
Here are some strategies:
If you're a student, you have acccess to teachers. One or two of them may have an idea about software. Ask them what is worth reading—what you will learn from.
Look at conferences and journals that publish about software: SIGPLAN, SIGSOFT, USENIX, Software—Practice & Experience, Journal of Functional Programming. Read about systems that look interesting to you. Write to the authors and ask them if they recommend you try to learn from their code. Listen carefully to what they say; most of the best hackers know they can do better. If you extract a grudging admission, with a bunch of caveats, that maybe there is something to learn there, you've found the right person.
If you're learning C, a lot of the old Bell Labs stuff is really worth looking at (and a lot isn't). I admire the work of Jon Bentley, Brian Kernighan, and Rob Pike, among many others. You can download and read the source of the original awk, or Pike's interpreter for Newsqueak.
Popularity does not correlate with suitability for learning. The GNU tools are very popular, but almost anyone who has seen both will tell you that you will learn more from the Bell Labs versions. And Linux is very popular, but people I trust who work in the field tell me that if you want to learn about operating systems, you should study BSD. I myself work in the field of compilers and can tell you that if you want to write a compiler in C, the model to emulate is the little-known lcc, not the wildly popular gcc.
Finally, I highly recommend the work of Richard Bird, Hans Boehm, Ralf Hinze, and Phong Vo (two Haskell programmers and two C/C++ programmers).
What I've found useful over the years, is to validate your code, go through coding conventions and best practices for various languages. Open Standards are the inevitable part of Open Source Software. In order to maintain a successful OSS project, it has to have some common ground in the community, so for instance:
if doing some (X)HTML and CSS, always do it by the W3C standards. Passing validation will in itself improve your skills greatly. Use tableless markup (see Benefits of tableless design);
if doing some PHP, go through PEAR coding standards which is the de facto standard for all OSS PHP projects;
if doing some Flash Platform coding in Flex/ActionScript, see Flex SDK coding conventions and best practices;
if doing some Java, see Code Conventions for the Java™ Programming Language.
Lastly, but not less importantly, research Object oriented programming and various architectures used for software development, e.g. the MVC pattern.
... analyzing others people code is a must in order to have a career in this field.
I wouldn't say that is correct. Certainly it is not a must. Reading other people's code doesn't usually explain why they chose to solve a problem a certain way, and what alternatives they considered and then dismissed. Besides, it is not uncommon to find open source code that is badly designed and/or badly implemented.
The problem is that ... but sometimes i can't solve the problems by my own.
Ah. Well the solution to that is to practice, practice, practice, and not be afraid to make mistakes. Be self-critical, but don't let this stop you from "having a go". The more you do your own problem solving, the easier it will become.
Ask, ask, ask, ask if you come across a particular problem or solution that you don't understand. Make a good-faith effort to solve the problem or to understand a solution, share your thought process, and ask. SO is an excellent place for that, which you undoubtedly have already discovered. Good luck!
As other said, ask to the mailing list of the project, anyway some of open source developers are not willing to help (unfortunately) for this sort of things.
In this situation I search answers by myself: pick up a terminal and use grep.
Guess naming of classes/functions that involves your problem you will find the way toward the module where the interesting bits are written.
Related
Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 9 years ago.
Improve this question
I've been attempting to learn programming (in C#) for a few years now. The problem I've had is that I'd know what I want to do (or what I want the program to do), but no idea on how to actually implement it. So I often wonder what it is I'm lacking. Is the mindset of a programmer somehow different, and I've yet to condition myself to that type of thinking, or do I just need to know more about syntax and what they do?
Of course, it's compounded by the fact that I have no means of taking classes at the moment.
So is trial and error the way to being a better programmer, or are there essential pieces that I presently lack?
Also, my goal is to eventually get into the Gaming Industry, and I don't know if that affects anything at this point.
By far the best way to improve your skills is to practice, practice, practice, and then practice some more. Just like an athlete gets better and hones his skills and natural abilities, the more you code the better you will get. Your best resources are going to be books and the internet--blogs, articles, websites such as SO are incredible sources of information. Google is your friend, learn how to use it effectively.
Find a problem you want to solve, and then find two or three ways to solve it. Being able to approach a problem from different angles can be an invaluable skill.
I would also recommend finding an open source project you can participate in. There are plenty of 'em out there.
Yeah, it's pretty much trial and error.
Or more accurately, research, trial, error, cry, fix, error, research, success!
Anything I want to do (that is new) I typically find by doing various searches, or I accidentally learn by participating in forums like this, and then am lucky enough to remember when it becomes neccessary.
Just dedicate yourself to research and trying "various things", and then you'll become better at it. You just need to accept that it will be difficult at first, and that that is quite acceptable and appropriate.
You'll get the hang of it. As long as you're motivated, you'll achieve what you wish.
I think the most valuable thing at this point is seeing working code in action. Get your hands on lots of working sample apps with full source that interest you. Look at the source, figure out what does what, and start to modify it!
Then try to write your own apps using similar constructs, and you'll find it much easier.
I like silky's second sentence. I agree. Just hang in there.
Find a project (small project) that you want to do, and then learn how to do it. Any project...like build a calculator or something. If you have a goal in mind, it makes it a lot easier...and it will make it easier to people to help you when you post questions so they can have a frame of reference.
Lots of google searches...and stackoverflow searches ;)
One other way that can get you started is to look at standard examples (and I'm sure you can find lots of those for C#) try and run them, understand what they do, and then start modifying them and play around.
Get your questions from such tinkering answered by reseaching the net etc.
Increase complexity and you'd be on your way in a while.
Search around for an C# Open Source project that interests you. Most projects will take any help you can give. This will allow you to practice your skills in a controlled environment.
You do have means to take courses at the moment. There are entire courses, complete with free textbooks, available online. And that's just one quick example.
I recommend you work your way through a couple of coding and design books while learning the syntax of a language or 2. Code Complete is a great place to start. As far as what you should start programming, aim for simple things that will solve a problem you have. While picking up a language I have done things like write a program that will auto-organize my media library, kick off processes based on things I tweet from my cell phone, quickly add shortcuts to my favorite launcher app, or organize and archive all of my saved school work at the end of a semester. Also, look at a LOT of other people's code. It's can be hard to code better until you've looked at better code.
With this approach you'll build your abstract skills like design and upfront preparation, practical skills like file access and network communication, and general programmer toolbox items like regular expressions and reflection.
Another interesting thing to try is Code Kata. How do you become a great musician or learn to ski or speak a foreign language? Practice. Practice. Practice.
Google for Bruce Eckel's "Thinking in ..." books, they're free and very good
Take a look at functional programming languages - This will broaden your mind and therefore change (and probably enhance) the way you look at code and problems.
Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 3 years ago.
Improve this question
I've been coding since my early teenager years. I started out with HTML, went on to PHP/MySQL (created my own forums, social networking sites, etc..) and then branched out into more traditional languages such as Java and C++ (also picked up a little VB .NET in high school). I'm most familiar now with C++ as that is the language of choice taught to us in Computer Science II (skipped Comp Sci I) at RPI. I now feel like I have a very good knowledge of how to program from this class (the homework assignments were brutal).
It is now summer and I am interning at a company that is providing me some level of new experiences with programming, but I want more. I want to feel the incredible satisfaction that I got out of my computer classes at RPI whenever I finished a long assignment (generating every possible wordsearch from a set of words to include and exclude comes to mind).
My question is, where do I go from here? I tried following a tutorials online, but they were all too simple. I then tried heading over to sourceforge and helping out with various projects. But, as soon as I downloaded the code I got lost in its complexity. I have never created actual software of a real life applicapable scale. And I don't know where to get started. How do you transition from programming knowledge to actuall creation of software?
I'm also open to learning new languages (javascript/jQuery, ASP .NET, C#, Python), or using new libraries and/or frameworks with c++ (we only used the STL in Comp Sci II) and other languages. Again my question is, where do I go from here? And I am welcome to all possible answers.
Thanks Much,
Michael
You could join a big open source project, you'll learn a lot and accomplish something cool.
EDIT after comment: If this is too complicated for you, try starting a "real" project. I say "real" because it should be something that you want to do, not a "create a blog" or "how to do a loop". For instance last year I created a fully functional project management system that I now use for some of my projects. If this is real, you will be more motivated and you will want to get this done.
Pick the technology you want for it. I'd recommend Ruby on Rails because it's awesome and full of interesting concepts that will improve the way you code overtime (DRY, RESTful, MVC...)... but you can pick whatever you want.
Try to create your project using what you know and basic tutorials. You will get stuck and have to learn some more in order to get the features you want going. To me that's the best way to improve the way you code and general programming knowledge.
Since you'll start the project from scratch, you'll see where to start and how this will evolve. I'll take the project management tool. We started with "A project has todos" and we ended up with all kind of other features such as a complex calendar, a full ajax interface, a embedded chat...
Once you see how you did this, try doing the same with a friend of yours to get a fealing of teamwork in development. Learn how to use SVN, basecamp... learn about software development processes (Agile!), peer programming..
There's a lot to experience! Then you could give open source another try.
Hope that helps
I'd recommend trying a pure functional language, such as Haskell. It's a completely different way of looking at programming, and I found it very satisfying.
I recommend the book Real World Haskell for learning it.
Edit: In response to comments, my interpretation of the question is where can he go from here as a programmer. Functional programming is a logical direction. For someone learning functional programming for the first time, Haskell is nice because it doesn't really allow for imperative programming practices. Furthermore, it has basically all features you will find in other functional languages, which means it will be easy to pick up other functional languages.
I would suggest looking at Project Euler. It's a great and fun way to learn a new language, and it does provide that level of satisfaction when you solve the problems. They offer a huge range of problems at all levels of difficulty.
I think the best way to improve your skills as a programmer is to do what programming was intended for: solve problems. I'm sure you've been playing around on your machine and at one time thought to yourself "I wish there was a program that did this..." or "I wonder if there are any programs that do X..." Instead of just googling to see if someone else wrote it, write it yourself. Start with something small, and gradually make it more complex. Add features. Allow yourself to fail, and when you do, ask yourself (or us at stackoverflow) how to overcome that obstacle. Once you have the basics of programming, everything else is just making big things out of littler things, and the little things are usually pretty easy.
When you are making something you know you will actually use, it's more fun and more gratifying when you finish.
Do you understand all of the following and how they work?
Linked lists (single and double)
Sequential vs. binary search
Binary trees
Stacks
Red-black trees
Algorithmic complexity and big O notation
Recursion
Hash tables and hashing algorithms
If you don't feel completely conversant in any of these, take a class in data structures and algorithms.
It seems like you've experienced many languages, but have not created a real-world application. Creating software in any of those languages will bring you to a new level.
PS: Creating software is much more than just knowing how to mess around with a language.
Check out Design Patterns.
I believe that's beyond mere simple coding.
You could offer your abilities to a non profit or a friend or someone who needs a website or program built.
Tell them you can do it for free and then just go for it. As you start to make it you'll start to see what you need to learn.
For example I bit ago I had the program Peel www.getpeel.com on my Mac. But sold my Mac for Wind as I am traveling.
Seeing that there was nothing for Windows (or nothing I could find) like Peel. I build my own in PHP and am up to a 4th rebuilding of it as I learn betters ways to do each new thing I am learning.
You've got to find a particular type of functionality that interests you. For me it's been basic socket programming and making my own protocols. I got that feeling when I was able to create a functional file uploading control that worked in conjunction with a file upload service on the server which I had created. The protocol handles authentication, chunking and hash comparison. Sometime soon I plan on incorporating file-resume functionality as well.
Well my advice will be to find a problem/project you are interested in and try to code it. Trying a real problem is something that drives you. Find something not to complex but not too simple. Something to try when starting a new language is to write some tools. You can for example program a python script that print metrics on a C++ project. You can write a tool that extract some statistics from a website you use, etc. When I learn programming game programming was quite fun (I was young :-) ). You can try to program some simple game using a 3D engine like Ogre3D for example. Participate in an opensource project is great too but as you stated perhaps a bit overwhelming for now ;-)
Find something you like and that has a REAL useful goal for you. You will thrive to solve the problem and learn a lot along the way !
I think the transition from the kind of finite tractable problems that are part of class projects (and some internships) to "real world" projects is quite tough. Sounds like language syntax, getting bugs out of code etc. is something you are comforatble with.
When we come to larger projects, probably with many release cycles, with developers working together, different kinds of problems emerge. I remember being shocked when I saw my first big project plan - what a small propertion of the time was actually writing code!
The thing I found helpful as a junior was "Sitting By Nelly", I was lucky enough to work for enlighted employers who put me with very experienced and helpful developers. Sometimes to work with, sometime to work alongside. I reckon that helped me get over the hurdles you describe.
So, I reckon you need to find employment of this kind. Be less concerned about specific technologies, salary etc. Look instead for the culture and level of responsibility you would have.
I think you should really start a "real world application" as suggested here. You will see that a real project requires a bit more than just knowing the language.
I suggest you find some simple problem you had issue with, and make a software that solves that issue.
For example, if you want some kind of software that checks RSS feeds every 5 minutes and makes a little pop-up as soon as a new one comes along. Or you want a program that will let you do simple presentations by just dragging a few pictures in.
Then whatever you choose, start by making the simple solution to the problem and extend from there (like do different settings, extra features etc.)
I've looked for the answer to this question for a while now. Most all of the suggestions are usually either help an open source project or build something that interests you. I'm starting to realize that those answers are vague because what's 'interesting' or 'valuable' experience and how to get started doing it is completely subjective. Also, there's only one way to get real experience, which is to work on real projects. It's difficult but find a project, personal, open source, or otherwise that will increase your knowledge in a technology or platform that you think will hold your interest. Then just dig in. It doesn't have to be of earth shattering importance, just valuable in relation to your own goals.
There is no magic bullet transition from academic puzzle solving programs to real world applications. The best way to learn is just to jump in head first. It will take you a very long time to learn what you need to if you only ever look at your own code. You need to be looking at code written by professionals and struggling to understand why it works the way it does until you do understand it.
It seems overwhelming at first, but you will quickly start to see patterns if the application is at all logical. Well written code will be separated in logical ways, so you should be able to pick it apart one layer at a time.
For example, you could try a bottom up approach where you try to understand how the database interactions are handled before looking at the code that uses the database layer. You keep going upward until you get to the GUI event handlers.
Large enterprise applications can be even harder to understand because there might be a lot more than one executable, or component. Try to stay focused and learn what the component is responsible for doing, and then pick it apart a piece at a time.
You will see that there are not just patterns at the function and class level, but at higher levels as well. This makes it simpler to understand what is going on when you understand those patterns.
Try to find an internship or co-op position. I was in a similar situation after my first few courses. I took a co-op position sophomore year and I learned so much more on the job than I did in class. Class is great for teaching you theory and the basics. I learned C# on my first project on my co-op and that got me my second co-op position at another employer (wanted to see how it was working at a small company).
This past spring, I accepted a position at my first co-op employer, reworking my first major project I had started on my co-op. I have a list of side projects I also want to complete, which will help round out my skills, as well as learn some other languages.
So my suggestion is try finding a job where you can have a great mentor. On my second co-op, I learned alot of the coding standards that I code against from my supervisor. He was a great teacher, and really had some great input, and explained why things should be done certain ways.
You will almost certainly go nowhere unless you find something that interests you. Figure out what is interesting, and then how to write software involving it.
The only way to begin is to begin! There is really no other way... The best answers you get would always tell you this. You have the knowledge, now put it to work!
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 7 years ago.
Improve this question
For an university project on usability I'm looking for an open source project that is useful but hardly usable. My group would do a complete usability review and give recommendations over a period of approximately 3 months.
Of course this is no purely altruistic idea and the best-case-scenario would be:
Our recommendations get implemented thus we can include an review of the improved version in our paper.
Are such one-shot usability reviews useful for (and wanted by) the average developer or are they just "better than nothing".
Do you know (actively developed) projects with poor usability that we could contribute to?
Besides sourceforge's "Help Wanted" and openusability.org do you know where to turn to?
Regards,
FGK
Update:
We are looking primarily for an end-user application because we want to include things like hallway testing with potential users.
(Thanks to Pekka Gaiser for raising the question)
2nd update: accepted answer:
Thank you all for your help. I think we'll go for libpurple and its graphical incarnations. The Linux and Windows versions of pidgin are truly a mess... :-)
I would suggest the GIMP - it's a very functional photoshop alternative, but it's not without its confusions...
Instead of choosing to help a project that is already bad, why not look at something heavily used?
There are many web based applications that may (or may not) benefit from a usability review - I'm thinking of things like Wordpress (in fact that's pretty much what I'm thinking of purely because I use it a lot).
It would be interesting to see what a group of "experts" think about Wordpress and how they would improve the UI - purely because any improvements made have the potential of helping/improving the experience for vast numbers of people.
Whether or not the Wordpress team specifically would implement any of your suggestions or changes is an unknown but even having a discussion and recommendations is most likely beneficial to the community.
Perhaps take a selection of projects (again I'm thinking web based because web usability is more defined [in my mind] - CMS/Blogging Software: Drupal, Joomla, Wordpress? Or E-Commerce applications? Forums?
Send out some "feeler" messages to the projects mailing lists to try and get an idea of whether or not they'd be open to the idea of help. I can't imagine many projects would be against the idea? Actually implementing changes may well be more difficult.
If you don't want to look at web applications maybe look at some of the "media" apps. Boxee or XBMC generally or Miro.
None of the projects I've mentioned are neccesarily bad (usability wise) but they're things I'm interested in so, from a slightly selfish point of view, it'd be beneficial to me (and I think a chunk of others) if you looked at something with a large user base.
Anyway, good luck.
Please, please, choose Audacity! That UI could be improved so much it's not funny...
How about Pidgin? It's a relatively popular open source project (I use it all the time) that is fraught with (in my opinion anyway) lots of usability mistakes, both minor and significant.
Usability reviews are ALWAYS useful, as well as being better than nothing.
Do I know actively developed open source projects with poor usability? can fish be shot in a barrel? :D look at the big projects. there's always lots of controversy about them (especially their versions for osx, since osx users tend to have a higher standard). I'd suggest gimp as the prodigal one, but I hear they're making great strides there. or maybe pidgin? I use the os x version (Adium) and the windows one and the contrast is brutal.
that said, the big projects probably won't really care about your input. some of the devs might pay attention, but as a whole, you probably wont steer that titanic unless they've already been spending a lot of time talking about this.
my advice? go on an ubuntu forum and ask the users there what they hate the most about their software. that'll give you good feedback because ubuntu is heavily used, which generally means there's going to be a conversation about this.
either way, if you want to see your recommendations implemented, you'll have to open up a dialog with the devs. you'll need at least one that believes in your cause to implement your thoughts (it may not be merged into the main trunk, but it'll at least be implemented in his branch)
good luck!
I have no idea whether they'd accept your input, but I think it would be interesting to compare KDE version 3 and 4. As a developer, I find version 4 all but unusable (and am switching to Gnome as a result). However, for the vast majority of users, their "award-winning" changes may have been an actual improvement.
If you want to see your changes implemented, be really sure to approach only projects with a high activity rate and people prepared to invest some serious time - you will need very motivated developers if you want to see (possibly fundamental) changes implemented. No matter which project you choose, be prepared for a lot of sometimes tooth-grinding work.
When thinking about web apps, Wordpress comes to mind. The back-end is crap (even though a lot of effort is being put in it), I hear people everywhere complaining about it. It is a very big name which is good for you and the probability to see suggestions actually implemented.
I recommend RIDE -- and IDE for developing robot framework tests. This tool is fairly young and has many classic mistakes, a few good features, and some good ideas with weak implementations. I think it would make an excellent candidate for a usability review.
I make this suggestion not because I want to point out the flaws in RIDE (after all, I was a developer on that project for a short period of time so it might show off some of my flaws), but because I think a) it has the potential for the study to help improve the product, and b) I think the tool makes some common mistakes you and your group could learn from.
It also has the advantage of being cross platform, so it should be suitable no matter what platform you're interested in.
Closed. This question is off-topic. It is not currently accepting answers.
Want to improve this question? Update the question so it's on-topic for Stack Overflow.
Closed 10 years ago.
Improve this question
I would like to work on a programming project in my spare time and would like to know
if there is a project where I can help the science community in some way?
Sure, plenty! I see I'm not the first to think of numerical computation libraries like Numpy/Scipy - the code in that is actually fairly mature but they could certainly use help documenting. There's also GNU Octave, which does much of the same things as Numpy but doesn't require Python. A slightly related area in which there's a lot of work to do is computer algebra systems (CAS), basically open source equivalents of Mathematica; for example Maxima, and more are listed at http://sage.math.washington.edu/home/wdj/sigsam/opensource_math.html. You could also help with visualization libraries, i.e. creation of 2D and 3D plots and figures. For Scipy the most commonly used plot generator is Matplotlib, for example. There are also loads of more specialized data visualization tools that I'm sure you can find with a few searches.
One area that I personally think needs a lot of work is creating GUIs for the programs mentioned in the previous paragraph; one major advantage that commercial programs like Matlab and Mathematica enjoy over their open source equivalents is easy-to-use graphical interfaces. Having a nice usable interface would be great for scientists who may not be skilled in command-line-fu, but open source projects have a long way to go if they're going to catch up.
Projects like scipy and numpy are largely contributed by the scientific community. I'm sure they would appreciate any help you thought you could provide.
I know BOINC is always looking for help
Edit: Here is their programming help page http://boinc.berkeley.edu/trac/wiki/DevProjects
The Bio* projects like BioPerl, BioPython, or BioRuby would certainly like some help, too.
http://sourceforge.net/search/?type_of_search=soft&words=science
In addition to searching open source projects online, you can try to contact your local university and ask if any of their researchers (students or faculty) need development help.
If you are still looking, feel free to contact me via my profile page - I know of a hardware product that needs software - it is used for research (chemistry and biology)
The nuclear ad particle physics communities make heavy use of ROOT, which is developed using an open source methodology. They accept suggestions and patches without much trouble. The main work is in C++, but there are binding and support for other languages as well.
I'm sure that other disciplines have their own domain specific tools. For instance, I know that there are open Computational Fluid Dynamics and Finite Element systems.
Have a look around. While domain knowledge would be helpful, most big tools are going to need help with routine stuff like RDBMS access, GUIs, documentation, and so on...
You can discover the current problems of Science by reading the abstracts of the academic journals. e.g. the Bioinformatics journal.
A few examples:
Find a faster/efficient methods to assemble a huge set of short DNA reads:
Find a way to build an efficient social scientific network
Find a way to compare thousand of human genomes
....
you could also propose your help on Nature Network:Collaboration or FriendFeed: The life scientists
There are many exicting opportunities in chemistry. There is a strong Open Source community, much of which is organized under the Blue Obelisk (http://www.blueobelisk.org). There have been major contributions in visualisation and algorithms which did not need previous chemical knowledge and the community is very welcoming to anyone who wishes to help.
For an example of the standard which has been achieved take a look at Jmol which visualizes molecules and other chemistry in 3D (http://www.jmol.org);
There is also real opportunity to do porting between platforms/languages. The commonest ones are Java, Python, C++ and we have been working in C#. You don't have to be an ace programmer either - contributions to data standards, data resources, tutorials, packaging, installers, testing, etc. are all highly valued.
Some of these projects are within the top 100-500 projects on Sourceforge.
Don't forget that if you find a project to be a bit over your head or you aren't able to really contribute, but you still like the idea of it, you can always donate!
Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 8 years ago.
Improve this question
I'm currently studying computer science and looking for a good way to practice and hone my programming skills. Contributing to an open source project seems like a natural way to do this to me. I currently know Java, Python, and some C, but wanted to open this up to any established language.
In particular, I'm looking for a project that's fairly active and has a lot of work for less experienced coders.
A better known project such as Firefox might have the advantage of being more recognizable on a resume, but perhaps one could have a larger impact on a smaller project. Any thoughts on this?
Thanks in advance =) -Matt
A popular one to start on if you know C is GNOME - www.gnome.org
Another great thing to do is look for projects that need help by checking out the Help Wanted listings at Sourceforge:
http://sourceforge.net/people/
The Python website also has a Volunteer Opportunities page:
http://wiki.python.org/moin/VolunteerOpportunities
A good way to contribute also is to look at the websites and mailing lists of open source software you use on a regular basis and ask if they need help, or just browse through their bug trackers to see what you can help with. This would probably be more interesting for you as you'll probably be able to make more meaningful contributions quicker with an existing knowledge of the software.
Good luck!
First, it has to be something that you are interested in and will enjoy working on. Otherwise it may become a chore or you may not contribute as much as you might otherwise.
Second, I'd make sure the project is active and has people working on it who you can learn from (by seeing what they've done and any changes they might make to your code once you check it in and they review it).
Finally, if you have any idea what you might want to do when you look for employment as a developer, then try to find something related to that area of programming, a tool that is used by developers in that field for example, as that will help you learn about the problem domain, as well as how to program, which help improve your cv/resume.
Whichever sounds fun to do, that's a rule of thumb for side projects for me. I'd suggest you start your own by the way, this is always more exciting and can teach you "get the things done" skill.
I prefer contributing to an open-source project already actove. Depending on what you want you will find games, databases..anything you's think about surely needs your contribution.
My really first contribution was to a game that used opengl ...space stariods i think, it was more like an optimization, or bug fix, i dont really remember.
I've done a plugin for GAIM (now known as Pidgin).. but never get to publish it as it changed name and api structure. It should have display the currently played song in the status-bar..with lots of configure options. Never finished it though.
Another thing was a 'echo' plugin for XMMS, but i found some bugs, it crashed easily and random (during development phase) ..and it was no longer maintained in the moment i've started developing, so left it in the dark also:) This one i liked a lot.. lots of cool and weird sound effects.
They were all cool as they all used different structures, and already established rules for coding, and commenting. Lots of thing to learn like this instead of starting my own project which wouldn't change my programming skills in any way:)
jHeidi is a program I like to use, but which is a bit buggy and could do with some development. It's written in Java.
There's a clear roadmap: It's following the more advanced development of its sister project HeidiSQL.