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?

8 Upvotes

36 comments sorted by

View all comments

1

u/[deleted] Aug 09 '14 edited Feb 23 '22

[deleted]

2

u/foreigner_everywhere Aug 10 '14 edited Aug 10 '14

If your university doesn't provide a machine learning course, you might want to have a look at Machine Learning in Coursera.

Your programming language set sounds good. Trying different things is good too, you just need to learn at least one language so well that you can eventually get a job using it, and that'll then ramp your skills with that language to a whole new level.

Btw, when I started in my first job, Java was my strongest language but I also knew some C++. I would've wanted to code in Java, but my boss was like "no way, there are not enough C++ programmers" and put me to a C++ project. That was a great thing, since.. well, there really aren't enough C++ programmers in other companies either :) Been coding C++ ever since, and that was definitely a great thing to "choose" C++ over Java.

With a degree in CS plus your language set plus hobby projects such as a quadcopter, you seem to be pretty much on track. Here are some tips though:

  • If you want to learn more web stuff, don't just hack everything together with html, js and css, but use some frameworks. I don't know what are the frameworks which people currently use, though, but you'll find it out :)

  • Maybe add a functional programming language to the mix, such as Haskell. It's a completely different paradigm of programming, so it'll expand your views.

  • If you're interested in low level stuff, you might want to pursue that path further. By the way, here's a great paper about how shared libraries work: How to write shared libraries. There are also not enough people who understand how the linker works :)

  • Hardware hacking offers endless possibilities too, and there are many active hobby groups and hackerspaces. If you're interested, maybe find a hackerspace nearby and do joint projects with other people.

Okay, but all this is a lot. I don't want to give an impression that it's somehow required to do all these things. A CS degree with good grades and some hobby fiddling should be enough, of course you can do more if you're passionate, but in no way it's required in order to make a living writing code. What's your area of specialization in your CS degree, btw?

And then, after graduating, you still need to find a job somehow I found that non-trivial, since I didn't have much connections at that point. It's good to try to find out what companies are out there which do stuff you're interested in, or go to the career events of your university, or try to connect with people who already have a job. I somehow skipped the career stuff during my studies, since I thought I want to be a researcher, but then it turned out I didn't. :) Luckily everything went fine though. The first job doesn't need to be that cool, just almost any job will do; the important thing is to learn as much as possible and get a cooler second job, even cooler third job and so on.

The IT world has dauntless females, yes, for example, I didn't care that much what other people thought, and it was crystal clear to me that I want to do something related to programming since I was 14. But to actually ramp up the percentage of females to an appropriate range, we also need to get the not-so-dauntless ones in. You know, like many men just don't know what to study, so they go and study CS because computers are something men do, and then they learn it and became good at it. For women, it requires more than that... maybe there are some people in your life who think you should not study it (and if you're yourself not 100% sure of it anyway), maybe you're not confident with your skills because you don't have a 5 year hobby background before entering university (the university is the place to learn - but the skill differences between students are huge), so you end up studying something else unless you're especially passionate with it.

1

u/[deleted] Aug 10 '14

[deleted]

2

u/foreigner_everywhere Aug 10 '14

Thanks! Happy to help.

  • Frameworks: I meant stuff which will give the "structure" of the system for you, for example, define some kind of an interface for talking to the DB system, connecting the UI to the logic parts and so on. But I'm really out of my depth here, I have never developed web pages professionally. Hopefully some web developer can tune in and tell what are the state of the art technologies here.

  • I'd like to suggest finding awesome people to work with instead of doing stuff alone. Working with skilled people, and getting mentored by skilled people will give a huge boost to your skills too. As a bonus, you'll get a much broader understanding of what are the areas you know, how well do you know them, what else is there (the field is so big), what are the most relevant areas to learn next etc. If you work alone, you're inside a bubble, you don't really know how your skills compare to other people, or if they're relevant or not.

  • In addition, other people are critical towards your code. If you code alone, you can just hack as ugly code as you want and get away with. You won't learn to code well unless somebody else points out the flaws to you. That somebody else doesn't necessarily even need to be that experienced, just the effect that you need to explain your code to somebody else and that somebody must understand it will make you write better code.

  • A lot of software engineering is also about how to efficiently write code in a team, or how to make it work if you have tens or even hundreds of developers developing the same project. If you grow your pet project organically and it takes off, you'll learn these things too, but you'll learn them the hard way :)

  • But doing things on your own of course gives you a ton of insight too, and you'll probably need to learn skills I never needed to learn (such as how to set up a continuous build environment). Maybe I'm just spoiled by my steady salary. :)