Slashdot is powered by your submissions, so send in your scoop

 



Forgot your password?
typodupeerror
×
Open Source Programming

Grad Student Looking To Contribute To Open Source 283

An anonymous reader writes "I'm an Applied Math grad student who knows a bit of Mathematics and a bit of programming. C++ is my first programming language — I am decent at it. I wish to start contributing to a numerical library with two purposes — contribute to open source and develop my C++ skills at the same time. I looked at the Boost libraries and joined the developer list. However, I have no idea on how to start contributing. I'm not an expert in template programming, having written only toy programs to understand that concept. I've used some of the OOP constructs like inheritance,but only for very small projects. Do you have any tips on how to get started on contribution? Are there any other emerging numerical libraries to which I can contribute? Are there any other avenues where I can contribute to open source and improve programming skills?"
This discussion has been archived. No new comments can be posted.

Grad Student Looking To Contribute To Open Source

Comments Filter:
  • by mike260 ( 224212 ) on Tuesday October 12, 2010 @05:15AM (#33867260)

    You did try googling for, say, 'open source c++ numerical library [google.com]' right?
    I ask because that yields a fair few that welcome contributions; maybe if you told us what your issues with them are then that would help us find you some alternatives.

  • by StripedCow ( 776465 ) on Tuesday October 12, 2010 @05:16AM (#33867270)

    To understand most boost modules, you definitely need a thorough understanding of templates.

  • Fix bugs (Score:5, Insightful)

    by a_n_d_e_r_s ( 136412 ) on Tuesday October 12, 2010 @05:18AM (#33867274) Homepage Journal

    1. Join a big open source project.
    2. Read the bug reports
    3. Start churning out fixes for bugs
    4. Profit!

  • by redcloud ( 3426 ) * on Tuesday October 12, 2010 @05:27AM (#33867304)
    Is there a bug tracker on this project? Tracking down and fixing bugs will force you to become familiar with the codebase, and hopefully, expose you to code from which you can learn. Also, find projects that you will use personally on a regular basis--i.e. "scratch your own itch". You'll do better work if the end result is not just some code somewhere, but something that you need and make use of frequently.
  • by draxil ( 198788 ) on Tuesday October 12, 2010 @05:28AM (#33867308) Homepage

    You are best off asking this question on the mailing list/irc/whatever of the community you want to contribute to. They'll know what needs fixing, and nurse you through submitting a few patches to them.

  • Team Up (Score:5, Insightful)

    by Blrfl ( 46596 ) on Tuesday October 12, 2010 @05:33AM (#33867342) Homepage

    Don't take this the wrong way, but you're in math, not CS. Call the CS department, find someone who's willing to team up with you on this and work together on turning the mathematical end of your contributions into good code. You'll come out of it with a better understanding of how software should go together, your CS cohort will get some insight into applied math and both of you will be better for the experience.

  • by somersault ( 912633 ) on Tuesday October 12, 2010 @05:54AM (#33867422) Homepage Journal

    Your intended point (while you stated it rather poorly, since it's stupid to suggest someone couldn't be a good programmer in a language simply because it's their first - I am still a "decent" BASIC programmer despite learning many languages since) is understandable and probably something that we all thought when reading the summary, but it does depend on your definition of "decent", and the poster's ability to self evaluate. Usually I take "decent" to mean "average to good". As an "Applied Math grad student" he has already demonstrated good logical ability and therefore probably has the makings of a good programmer.He didn't claim he was amazing, but presumably he can write code that works even if it's not amazingly efficient, and he clearly knows he has much to learn and is looking for avenues to improve.

    Rather than simply making obvious criticisms, you could try to help. I unfortunately have very little experience with helping out in open source projects, and have no clue about Mathematics libraries so I can't offer any useful advice, but I'm certainly not just going to sit here and watch while some smug AC takes immature pot shots at a guy who is trying seriously to both better himself and help out other people in the process.

  • Re:Fix bugs (Score:4, Insightful)

    by SharpFang ( 651121 ) on Tuesday October 12, 2010 @06:06AM (#33867460) Homepage Journal

    Definitely yes. Start out with simple, contained bugs. Then move to the bigger ones, that span several modules. Once you get a good understanding of the structure of the project, you can move on to "Feature request" type bug reports.

  • by somersault ( 912633 ) on Tuesday October 12, 2010 @06:17AM (#33867500) Homepage Journal

    Which is why I said:

    Your intended point is understandable and probably something that we all thought when reading the summary

    Still, being decent at a language and it being your first language are not contradictory things. Thinking he's decent at the language and not knowing much about templates is of course more contradictory, but you certainly don't have to be an expert to be "decent" at something.

    Anyway, my point was that guy is obviously aware he has more to learn and is humbly asking us how he can do so. It's an attitude that should be encouraged, and it's sad that the first post is someone trying to insult him, with no actual helpful advice.

  • Well (Score:5, Insightful)

    by ledow ( 319597 ) on Tuesday October 12, 2010 @06:33AM (#33867552) Homepage

    You're an amateur, like the thousands of others on the net, like me. This is not a programming skill problem - that comes from either practice or aptitude, not pure willing. This is a contribution problem. You're looking for a project that has many skilled users and also has a very, very basic need they have to meet but at a basic level and that they haven't already done themselves and probably won't take too long. See the problem?

    You're asking entirely the wrong questions - I would suggest that instead of trying to add something to Boost or similar, that you try to do something yourself and thus work out why Boost and similar projects are quite complex, have certain standards, etc. The problem of patch submission, new features and bug-fixing is not one of people willing to write the code that fixes the problem - that part's easy, and the fun part - it's finding something interesting that fits within the scope of the project and it's the problem of getting that code into the shape that the project would be happy with too. Thus bug-identification and lots of the hard slog-work (test suites, etc.) are much more useful than anything else you can come up with. I guarantee that the first few ideas you have to contribute to a large project will be knocked back because a) they've been suggested a million times, b) they don't WANT to do it that way, c) they CAN'T do it that way for some reason or d) they just don't trust your code and would spend longer fixing it than just writing it themselves.

    I would suggest that you do one of the following:

    1) Write your own library, for something you know intimately. Publish it on a website, document it well, do it under a loose license. Chances are it will overlap with other projects but they are always alternatives for everything and if your library is BETTER than the others, it will be used in preference, code will be absorbed from it into other projects, or people will ask you to for more of it. Chances are that it will take you a LONG time to make it better than even the bare basic libraries you find on the net.

    (I'll use an example that I'm familiar with - SDL has lots of graphics primitive libraries, but SDL_gfx is one of the best despite not being the only "big" one, despite being unofficial, despite being a one-man operation and yet is used in thousands of projects. All it does is draw circles and polygons and rotate images, for God's sake, but it works and it's simple and it's fast and it's documented so it gets followers)

    I know that when I go looking for a library to solve my problems, I am happier with something tiny and in my language of preference (C instead of C++) than some huge generic library that does a million and one other things. I have been on hundreds of tiny sites and found some absolute gems where the author just knocked up the exact piece of code I was after and nothing more and then I've used it, extended it, reported bugs in it and it becomes part of my standard toolchain (as an example, I use LodePNG to save PNG images from SDL_Surfaces, not because that's the only way, or even the easiest way, but because I found it easier than trying to get libpng to do it for me - some of my projects actually use libpng for loading and LodePNG for saving PNG's!).

    2) Meld into the community - hunt for bugs, be active on discussions, suggest features (after reading the FAQ's about what not to ask for, etc.), maybe even implement a few test routines to show how useful your feature-X would be. Produce test suites (horrible, horrible job that's incredibly boring but serves a useful purpose). Run valgrind, or some kind of mathematical analysis, on the code and report your fixes for anything found back to the community. The hard-slog but useful stuff that nobody really wants to do.

    Everybody would love to be chosen to just insert thousands of lines of code into a big famous project - it very, very, very rarely happens. More likely is that you have a small project of your own that others find useful (because it avoids t

  • by petes_PoV ( 912422 ) on Tuesday October 12, 2010 @06:38AM (#33867572)

    Are there any other avenues where I can contribute to open source and improve programming skills?"

    The internet is drowning in code and starving from lack of decent documentation on how to use it. if you want to transform a mediocre, existing OSS project into a world-class, standing head and shoulders above everything else in its field piece of exemplary work, then take ANY numerical library and write some examples for it, write explanations on how it works, what its limitations are (hell: even comment some of the source code itself). Write user guides, API guides, put together a FAQ or a Wiki. List the mistakes and create some workarounds.It's not sexy, but it's what we need most.

    The other thing that inspecting other people's work will do (apart from really honking-off some of the more protective - read; poor - software authors) is to show you, close up and in the real world, some of the constructs and techniques that are employed. For better or worse, this will give you a lot of experience in good and bad techniques and will give you a much larger palette to choose from when you decide to endow the planet with yet another piece of OSS of your won making.

  • by znerk ( 1162519 ) on Tuesday October 12, 2010 @06:46AM (#33867596)

    I am not a strong programmer, although I can at least code my way out of a wet paper bag, if given enough time. Similarly, math is not my strong suit.

    I have a personal programming project which I will eventually end up releasing to the open-source community for several reasons;

    • I think the possible benefits to the information industry would outweigh any profit potential in it.
    • I can't figure out how to monetize it without massive litigation in our current patent system.

      The idea may actually already be patented, but I have a 1970's science-fiction story that contains the "prior art" if anyone wants to challenge me. I don't actually think there are any patent issues, but that doesn't necessarily mean that I'm correct, especially since I haven't done any actual research along those lines. I can say without a doubt that I don't believe the concept is currently in use in any field that I'm aware of.

    • My programming and math skills are not sufficient to bring it to fruition in a reasonable amount of time.

    I haven't released the details "into the wild" yet because I want my name attached to the end product (for portfolio reasons, I guess, or maybe I'm just proud of the idea). I'm not entirely sure how to go about protecting my interests in this matter.

    It deals heavily with prime factors of extremely long numbers (so long, in fact, that I believe I will eventually require 128-bit computing for efficiency with my current algorithm ideations; it appears that it would be best to work with 120 binary bits at a time (or some multiple thereof, but quantum computing is still a good ways off from consumer-grade products, I fear). I will still need to work with strings (as opposed to pure numerical constructs) due to the immense size of the numbers involved. I initially came up with the concept while reading about a related idea in a sci-fi novella from 40 or so years ago, and I started toying with it as a... well, I guess the best thing to call it would be an informal feasibility study. After some research and some limited testing, it seems to be holding up to my initial ideations, other than length of time involved to actually perform the process. It seems the process is a bit cpu-intensive, and my initial estimates of "several hours" for completion appear to have jumped several orders of magnitude. Distributed processing should ease that quite a bit, although threads are a bit out of my scope. I do have some good ideas on how the process might be parallellized (is that even a word?).

    I have a basic grasp on most of the algorithm, but I am (go ahead, laugh) primarily a VB coder, and I believe this project would be better suited to C, or perhaps python (I have heard something about sci-py?) I am not going to trumpet about my skill set, obviously, but I do believe I can eventually finish this project on my own - I've bounced the idea around in my head for several years, and only recently started actually working on the code. Unfortunately, as I said earlier in this post, I think I'm using the wrong language; and I'm not currently in the best position to be learning a new one. I also seem to have some sort of mental block for languages other than VB (even .NET is problematic, most of my coding has been VB4 and VB5) or so-called "scripting" languages.

    I'm not sure how best to get someone to contact me via slashdot, but if anyone is interested in a (probably) not-for-profit endeavor, and can throw me some contact info, I would cheerfully find a means of communication to give this project a productivity boost. I would be requiring an initial non-disclosure agreement, of course, but am totally willing to share credit (and any profit that may arise) from any actual release.

  • by mariuszbi ( 1113049 ) on Tuesday October 12, 2010 @07:09AM (#33867686)
    As a C++ developer and boost user, I advise against starting to code for it. API design and implementation are quite hard as opposed to "normal" programming, as you need to factor several other problems: building a easy-to-use generic interface, mandatory in a library, is much more difficult to code than in project that works with specific data models. Also, I had specific problems with boost::filesystem API so I can tell you getting a bug acknowledged and fixed in a particular version might be frightening at first(no, I don't want to update my boost version to get it... I want it backported). I suggest you find a piece of code that you are interested and find useful and follow this simple roadmap:
    1.Install it and use it
    2.Subscribe to user/devel mailing lists
    3.Write missing documentation and unit tests for components
    4.Offer to implement features/fix bugs that have been appearing for some time but have a low priority.
  • by sqldr ( 838964 ) on Tuesday October 12, 2010 @07:38AM (#33867830)

    last time I read a boost header, I found that an understanding of hardware/OS-specific optimisations and quirks was rather important too. By the time you've read through all the #defines and figured out which bit runs on *your* OS, you've forgotten what you were reading it for :-)

    It's not just a useful library, it's supposed to be fast and get its data sizes right too. I'd start with something less industrialised.

  • by mwvdlee ( 775178 ) on Tuesday October 12, 2010 @07:43AM (#33867854) Homepage

    Knowing a bit about the Boost libraries, he's probably talking about template METAprogramming instead of mere template programming. The former is quite a bit larger of a bitch than the latter. You can be a quite decent C++ developer without ever having done template metaprogramming.

  • by AngryNick ( 891056 ) on Tuesday October 12, 2010 @07:44AM (#33867866) Homepage Journal
    What seems pretty obvious is that the guy's question is about how to get involved in an OSS initiative, not how to find one. Cultural barriers aside, the perception from the outside is that many existing communities are closed, elitist kingdoms that are unwelcoming and intimidating to newbies. So, while providing a helpful search query may be clever, it does not address the essence of the question and serves to perpetuate the stereotype.
  • Re:Maxima (Score:5, Insightful)

    by jank1887 ( 815982 ) on Tuesday October 12, 2010 @07:56AM (#33867926)

    I second this motion. You can immediately start USING Octave and Maxima. You're a math student, so just start doing math. You'll quickly uncover some bugs and limits. And as said above, you can see the bug reports for both. At that point, get to work.

  • by wrook ( 134116 ) on Tuesday October 12, 2010 @08:40AM (#33868144) Homepage

    Not taking the side of the parent, but from reading the summary I get the idea that the person asking *isn't* decent at C++ (at least by your definition of average-good). I base that only on the statement that they've used "some" OOP concepts in toy projects. To be decent at C++ you need to be able to understand the implications of the fact that it is statically bound. If you don't, you're not going to be able to write decent C++ code. You might be able to "make things work". A good programmer in C++ should also be able to grok most of the template code in Boost.

    Having said all that, I think this person has picked a good project to work with. They can move from being a beginner in C++ and move through being decent to even being good. This is especially true because they are likely more than decent in the subject matter in the Boost library.

    For advice, I recommend to keep following the development list. Check out all the changes and read them. Try to understand what they are doing. If you don't understand, it might be possible to ask specific questions to the person who wrote it (be diplomatic, though, as they may be tremendously busy). Try to fix a bug yourself. Send in a patch with the disclaimer that you are a beginner and would like feedback. There are many people who will be happy to help you.

    There are some good books that explain how to do the template stuff that Boost is doing. Unfortunately it's been a donkey's age since I did any C++, so I can't remember the names of any. Perhaps someone here can help. If not, I'm sure you can post on the Boost mailing list that you want to find a book on C++ templates and are looking for suggestions.

  • by mcvos ( 645701 ) on Tuesday October 12, 2010 @08:43AM (#33868166)

    C++ is a safe, expressive, modern language - like Java but without all the horrible limitations. Yes it takes a bit of study and it's not for casual programmers, but the results are worth it.

    C is much lower level, unsafe language. Good for what it does but dangerous and a very bad choice for large projects.

    It's good you've been rated funny rather than insightful. C++ is every bit as unsafe as C.

    Yes, they are very different languages, as C is intended for low-level systems programming, managing individual memory locations and stuff like that, whereas C++ has modern OO concepts badly tacked on top of that in a wrong way. It combines all the problems of Java with all the problems of C, and then adds some more. The end result is quite powerful, but not something I'd ever dare to call "safe".

  • Easy Question (Score:3, Insightful)

    by JambisJubilee ( 784493 ) on Tuesday October 12, 2010 @08:43AM (#33868170)
    The answer to your question is quite easy. Take whatever your thesis is, and create high quality software tools to help you to that end. Work where you're (trying to be) an expert. If tools already exist, expand those tools in the direction of your thesis.
  • Comment removed (Score:4, Insightful)

    by account_deleted ( 4530225 ) on Tuesday October 12, 2010 @09:07AM (#33868390)
    Comment removed based on user account deletion
  • by Joce640k ( 829181 ) on Tuesday October 12, 2010 @09:24AM (#33868628) Homepage

    The end result is quite powerful, but not something I'd ever dare to call "safe".

    C++ is as safe as you want to make it.

    eg. Did you know that Visual C++ operator[] does range checking in all standard container classes/strings?

    If you do stuff like that and ban raw pointers (ie. all pointers have to be objects and thus subject to RIAA) then most of your traditional C++ problems disappear. It just takes a bit of practice and getting over the C mentality.

    In return you get multiple inheritance, timely freeing of resources, operator overloading and much more expressive power than Java.

    A good portion of Java code is just copy/paste because you can't inherit implementation and try/finally blocks to get your files closed at the end of functions, not just when the garbage collector feels like it (which might be 'never'). In C++ you write code once in a library and it stays written.

  • by Joce640k ( 829181 ) on Tuesday October 12, 2010 @09:37AM (#33868794) Homepage

    Did I really type RIAA instead of RAII? Oh, dear...

  • by Anonymous Coward on Tuesday October 12, 2010 @10:03AM (#33869130)
    Template metaprogramming is functional programming with a nasty syntax. The grad student ought ot forget c++ and start programming with erlang or haskell ... it's probably a better fit for him (given his background) and there's more opportunity to contribute.
  • by StripedCow ( 776465 ) on Tuesday October 12, 2010 @11:56AM (#33871032)

    Good points. But we're talking about the actual programming, and then it really boils down to doing a lot of template stuff.

    The ideas behind Boost are great, but I really hope that somebody, somewhere, will sooner than later invent a new generic-programming language that will allow an implementation of the Boost ideas without the major ugliness of abusing C++ templates to the max.

  • by Anonymous Coward on Tuesday October 12, 2010 @12:29PM (#33871624)

    What seems pretty obvious is that the guy's question is about how to get involved in an OSS initiative, not how to find one. Cultural barriers aside, the perception from the outside is that many existing communities are closed, elitist kingdoms that are unwelcoming and intimidating to newbies. So, while providing a helpful search query may be clever, it does not address the essence of the question and serves to perpetuate the stereotype.

    Most communities seem closed because the internet is vast and there are a lot of idiots and trouble makers out there who at best waste time and at worst wreak havoc with a project. Since FOSS projects don't have employment processes and hiring forms, they need mechanisms to make sure they are working with the right people for the job.

    Here are some hints to help you get through the initial barrier of egotism end rudeness that many projects use to protect themselves:

    1. Join the mailing lists.

    2. You may if you like, send an introduction to the mailing lists, but do not say anything else until you get an idea of the culture of the community, what netiquette guidelines do they follow, who is who, and the general tone that people use to address each other. Aslo try to figure out if there is certain sorts of questions the project doesn't like to answer. It's possible they deliberately obscure certain configurations, etc. in order to guarantee consulting income. If you think this wrong, and you want to be some kind of maverick coder vigilante, call them out and publish the tricks widely. If on the other hand you want to be a dev on the project, accept that this is the real world, and these devs are doing enormous good giving this volume of code away, free to use for anybody smart enough and interested enough to figure it out and at small once of consulting fees to those who aren't so inclined. Be kind to them, don't answer questions that seem to fit into this category, don't publish the fixes anywhere, think of it as a gift and keep it in your pocket for your own consulting career.

    3. How long you lurk varies greatly from project to project, but it will always be longer for dev lists than for user lists. Once you have figured out the community a bit, start showing your worth by being helpful on those questions that come in to the user list that you can answer. A community is not going to accept code contributions from someone who can't figure out the part of their project that they expect users to be able to understand. So show you understand what they are doing.. At this point, it's probably best to be friendly and helpful, but if it is one of those lists where a lot of the popular (not to be confused with profusive) posters are boastful and have a bit of a bite, it's probably safe to start showing a bit of a swagger already.

    You can also use this time to start climbing into the code, get to understand the architecture of the project, the existing coding culture (is code readably formatted, is code commented well, are they cowboys or nazis? When reading about fixes or changes in the dev list, look at the code, try to understand what they are talking about, how it all hangs together.

    4. Once you have demonstrated that you understand their project well, are helpful and involved. You have mirrored their preferred modes of behaviour! You already seem like one of them just waiting to be adopted! You start contributing to the dev lists when you've understood the code sufficiently to make a contribution. It doesn't have to be a particularly brilliant contribution. It could be something a 5 year old could have spotted, and you just happen to be the first one to see the incoming mail. Don't write out the full function in perfect code with every excpetion caught, all nicely commented and logging in all the right places. Don't try get commit writes to the project, just formulate a solution, implement rought it in your local copy to make sure it works and describe it on the mailing list. If you've solved the problem correc

I tell them to turn to the study of mathematics, for it is only there that they might escape the lusts of the flesh. -- Thomas Mann, "The Magic Mountain"

Working...