Grad Student Looking To Contribute To Open Source
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?"
1. Join a big open source project.
2. Read the bug reports
3. Start churning out fixes for bugs
4. Profit!
Just saying it like it are.
I work in air traffic control and kinematics are a big deal for us. This is the software which takes care of coordinate systems, motion and transformations. Say you have a vehicle with a particular WGS84 coordinate. Its moving at a particular speed in a particular direction relative to true north. After one hour where will it be in three dimensions relative to its original position? How much distance will it have covered? What happens if its trajectory went within two metres of the south pole? What path in 3D will it follow if it maintains a constant altitude above the datum along the way?
Ok now say it is not allowed to fly into (say) North Korea which has a particular shape. How can you project its path forwards to determine if it goes into the air space over that country?
And so on. Its bloody complicated stuff and I reckon a lot of open source software would benefit from a library which did this. Ideal for a maths guy.
http://michaelsmith.id.au
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.
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.
which is totally what she said
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.
which is totally what she said
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
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.
politicians are like babies' nappies: they should both be changed regularly and for the same reasons
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.
I wrote my first program at the age of six, and I still can't work out how this website works.
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.
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.
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.
No sig today...
Did I really type RIAA instead of RAII? Oh, dear...
No sig today...
Here's an example of what the ledow is talking about with point #1. Or at least a corollary of his point in action. About a decade ago, I wanted to play with XML files in C++. There were no good, small libraries to do that. There were a couple of ridiculously large, complicated libraries that would handle XML files, but you'd lose more time learning the library than you would ever put into your actual code. So I created libxml++, to scratch my own personal itch. It was, at the time, a small but useful wrapper around libxml. Very basic, and demonstrated mostly that I knew less about either C++ or XML than I thought I did.
But people used it. (They also used my CLI Yahoo Messenger client, but that became defunct after I handed it off to other developers, due to the then-rapidly changing Yahoo protocol. The single most touching e-mail I have ever received was from a user of that client.) One of them submitted some patches, and eventually in 2002 I passed off ownership of the libxml++ project to him. I don't code in C++ much anymore, so I don't use my own library, but I do check in on it every so often. There are regular commits, including one last week, and an active mailing list, with several thousand messages. It's in Debian's main package repository and a number of diverse other packages depend on it.
All of this is the result of an itch I had ten years ago. Don't let anyone tell you that this kind of thing never happens and that there are just a billion useless libraries and programs half-written out there. There are a billion of those, but if you have a need for something that nothing on the market seems to fill, the chances are good that you're not alone in that unfilled need. Fill it and make it easy for others to use it and contribute to it, and see where it ends up in 2020.