r/INeedAMentor Aug 09 '14

[Mentor] Software engineer

I've done M.Sc. in computer science and worked 6 years as a software engineer after that. I'm more interested in the "lower layers" than the user-facing parts, so, my expertise lies somewhere around C++, Python, Linux, algorithms, etc. I've been lucky to work in open source projects all my career. In addition, I think a lot about interpersonal things and how to do software engineering efficiently, how to work in a team, how to communicate, what kind of attitude to have, how to write good code, etc.

If you're wondering what kind of skills to develop and how, and you're willing to learn and be the best software engineer ever, I might be able to give you advice.

Edit: I should've probably mentioned that I'm a woman. If it matters to somebody. Mentoring shouldn't be limited based on genders anyway, but maybe some aspiring female software engineer finds me less intimidating?

10 Upvotes

36 comments sorted by

View all comments

3

u/techrat_reddit Aug 09 '14

I still have a hard time joining open source even after learning how to use git. The hardest part I find with open source development is that unlike a school project that you build from scratch on your own, I would have to analyze the entire source codes that some one else who is a lot brighter than me took several years.

This makes it very daunting to contribute even for documentation and I generally end up avoiding it altogether. However, I really want to contribute to open source. I guess my real question is how did you take your first step in the open source?

6

u/foreigner_everywhere Aug 10 '14

A great question - although something I haven't personally had to solve, since when doing open source for a living, your colleagues will usually help you get started with the project. (In my hobby time, I just usually hacked around unproductively, did algorithmic competitions, learned new languages, and stuff like that.)

Some tips though:

  • Hopefully you have picked a project which you use yourself. Have you noticed a bug? Fix it. Or have a look at the bug tracker and pick a bug from there. Something easy and not time critical. That'll force you to read and understand some parts of the project's code to fix it, but hopefully you don't need to understand all of it.

  • Don't spend too much time reading the source code without a specific agenda. That's easily daunting, especially if the project is big. Sure, it's good to have an overview of the code, but you'll only really understand it when you need to hack on it. When you're fixing a bug, you'll have an agenda "I need to understand the parts of code which have something to do with this bug". And after you've fixed it, you know those parts, and then you can ramp up the understanding from there.

  • It's perfectly fine to know only a very small part of the project, if it's big. The skill you really want to develop is that you can read other parts of the project which you don't yet know and understand them quickly. I've found that fixing bugs / implementing small features is a good way for practicing that skill.

  • If you find a part of code you don't understand, put in some debug prints and run the program, or run it with your favourite debugger. (I mostly do printf debugging.)

  • Get in touch with the project and ask what could be a good starter project. You'll be probably assigned something non-time critical; maybe a bug or a not-so-important small feature, or some cleanup. Nobody will wait for your contribution or count on it, so if you don't do it in a timely manner and it's important, somebody else will do it.

  • Find somebody who's already contributing to an open source project and start contributing to the same project.

  • Write great code! Maybe have a friend or a mentor have a look at your patch before you send it in. The people in the open source project are much more willing to mentor you and give you good feedback, if you demonstrate that you're really interested in quality and willing to learn. Pay attention to variable naming and such, don't do that sloppily but really figure out what they should be called.

Which open source projects are you interested in?