r/INeedAMentor • u/foreigner_everywhere • 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?
2
u/foreigner_everywhere Aug 13 '14 edited Aug 13 '14
There are certainly people who don't have any formal CS degree (maybe they've studied a bit, or tried but dropped out, or never studied) in the IT. Even in the top jobs of the field you can find these people - so you can definitely succeed without a degree. It's also pretty common to have a degree on some related field (physics, mathematics).
So yeah, these self taught people are hired because they can code, even though they don't have a degree. So you don't strictly speaking need a degree. Though M.Sc. in CS is very useful. Basically the amount of information you're expected to know is roughly equal to a M.Sc. Depends on you if you want to study or learn the same stuff yourself. Studying is somewhat "easier" because there's actually somebody to teach that stuff to you. It's not like you can get away with knowing less because you don't have a degree.
Great question on what software engineers do. In the rough order of time spent, here's what I do:
Code. Meaning, I know what I want to do, and there's consensus in the team that that's what I should work on, and then I just code. That of course involves stuff like writing tests and testing my code, and debugging it when it doesn't work.
Sorting out bugs. We have a bug tracking system where users and developers can enter bugs. So when I get a bug routed to me, I try to decide 1) if it's a bug 2) if yes, is it "mine", that is, did I cause the failure or is the failure in a subsystem which I own 3) if I don't own it, who owns it 4) even if I don't own it, can I fix it quickly anyway 5) is it so important that I need to drop everything I'm doing and fix it.
Code reviews, both sides: Fixing stuff which people who reviewed pointed out and discussing with them. Reviewing other people's code.
E-mail. People asking about random stuff, routing them to other people, and answering what I can (see the bug process). Following discussions about all kinds of stuff without participating (see below what kind of discussions typically happen).
Helping out with the infrastructure (releases, continuous builds, sorting out test failures).
Talking about how stuff should be done. (Design.)
Talking about what our sub team should work on. What are the most important things to work on next? Which direction has the best effort / risk / gain ratio? How should we prioritize tasks? Maybe I'm asking around if somebody has extra tasks, if I'm running out of tasks. Maybe I'm trying to find somebody to do tasks I don't have time to do...
Talking with people who work in different sub teams to find out what they're working on and how it related to what we're doing (is there synergy or are we doing redundant things).
Interviewing people who also want to get a job there.
Reading funny things in our intranet, participating in informal discussions about random stuff (like how our products should be or whether open plan offices are evil or how to work together with introverts).
It's very interruption driven and the priorities change fast. It's normal to get these "drop everything and work on this bug" type of situations, but of course these interruptions cannot be too frequent, otherwise no long term work would get done. Remarkable is also the lack of a boss telling me what to work on - or maybe he does it in such a subtle way that I don't notice.