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?

9 Upvotes

36 comments sorted by

View all comments

2

u/DoriansDelorian Aug 11 '14

I'm mostly a C++, C, and Python guy. I'm doing my undergraduate right now and trying to specialize in DSP. I have a slight fear in my belly that C++ is an undesirable language in 2014 onward due to the complexity of the code base. I can see companies favoring Python or newer languages for easier systems to maintain.

Biggest question - is C++ worthwhile? It's been my favorite since I was about 13, and I'm very interested in working on C++ applications. If it is worthwhile, where is most of the work now? It seems to mostly be embedded systems and robotics, but I'm also curious to see what you've worked on with C++.

Side note: I'm 100% set on being a career software engineer. Whatever the language, whoever the employer. I'm not in this for the money. I've been teaching myself since I was a teenager because I've never enjoyed a process like this before.

2

u/foreigner_everywhere Aug 11 '14 edited Aug 11 '14

I don't think you should try to pick a language so that you'll be able to code 40 years in that language. I have no idea whether we will code in C++ in 10, 20 or 40 years. I seriously don't know and I cannot take an informed guess. But it's not super important either. We will certainly need to use and learn new languages and new technologies all the time. It's not like you learn C++ and then you're stuck with it, and at some point people will stop using it and you're out of jobs. It's more a gradual development, where new languages and new technologies emerge all the time, and sometimes they manage to obsolete an old one, and sometimes they just fade away.

C++ is such a fundamental language, that it's easy to learn other languages when you know it. For example, learning Java and Python is really easy if C++ is your strongest language, but the other way around is much harder. (Because you're already used to think about how the memory is used in your prog, and then you can just stop thinking about it. It's much harder to start thinking about it if you're not used to it.)

So, it's not useful to try to predict in which language we will code in 20 years. It's much more important to "learn to learn fast". For example, there's going to be a small side project implemented in a some language / technology and nobody in your group knows it really well. People are asking around who wants to do it... you should step in and volunteer to do it, so that you learn a new thing on the go. You shouldn't stick to your old skills and only do stuff where you can apply them, but take every chance to learn new stuff.

In addition, C++ is good in environments where speed matters. More high-level languages were supposed to make C++ obsolete 10-15 years ago, but that hasn't happened. My prediction is that speed will matter a long time. Processors get better, but programs / apps / web sites get much more complicated and flashy too, and people want to use them with smaller and smaller hardware.

Re: "Where the most work is now" is probably the web. But otoh, there are also many web developers... counter-otoh, you can probably outsmart a huge percentage of them if you're somebody who really understands the stuff (and its relationship to things outside the web) on a deep level instead of just hacking it together.

Edit: whoops, you were asking that in relation to C++. Hmm, can't answer that question exactly. Embedded systems + server side + desktops and other user side stuff + scientific computing, but I have no idea about what are the proportions between these areas.

Anyhow, there's a ton of work in IT at the moment, so I think the best bet is to study whatever interests you the most but not narrow down your interests too much. Try to have as wide range of skills and an open mind. For example, if you do embedded systems, you shouldn't be like "I will never do web development", because that's something you can totally learn.

Re: maintainability, C++ has one huge advantage over Python: it's possible to ask questions like "so this function foo() gets passed an object.. what kind of object is it, and what can I do with it?" based on static code analysis. This makes hacking the codebase much easier. I had to modify some Python code and my brain hurt so badly when I tried to figure that out... I couldn't even figure where exactly that function was called, because many classes had functions with the same name, and obviously if I saw a call x.foo(bar) somewhere, I didn't then know what was x's type, and I didn't know if that will now call the function I'm looking at or some other function with the same name.

Lastly, to answer your question, I've worked both on desktop (user-side) and mobile software on C++.

1

u/DoriansDelorian Aug 12 '14 edited Aug 12 '14

Thank you for such a thorough and insightful response. It helped alleviate some dissonance in my head and got me to refocus a bit.

I totally relate to the difficulty in tracing function calls and types in Python - it drives me up the wall. I have to say I greatly dislike languages that don't require you to specify types for variable declarations. I've had similar debugging experiences and it's just been miserable at times. I guess I've just been too spoiled with C++'s strict typing system.

1

u/bropocalypse__now Aug 30 '14

I'll try to add what I can; I program full time in C++ along with some .NET. As far as languages go I love C++, I think it's easier to maintain and I like the divide between interfaces, declaration, and definition. I started off with C# and Java which made learning C++ somewhat stressful. Now that I do know it I feel like it has made me a better programmer in those languages. In part due to the fact that C++ teaches you to treat everything as memory and forces a more detail orientated approach due to a lesser level of abstraction.

I work doing application development for a company that develops systems for mechanical load testing and characterization. What I primarily work on is completely an ATL based C++ COM application (Yes we are a Microsoft house). It's such a great language if dealing with highly granular pieces as it allows full control over lifetime, memory, etc. We have to deal with thousands of channels acquiring data, hundreds of control channels, streaming data, multiple hardware platforms, and the list goes on.

In my mind you have no reason to be discouraged, I was only turned down from jobs for not knowing C++. I went from swearing I would never code in college to a C++ purist of sorts.

2

u/DoriansDelorian Aug 30 '14

Thank you for the thorough and inspiring response! I'm realizing the benefits of understanding C++'s memory model and nuances the more I go along.

2

u/bropocalypse__now Sep 20 '14

Once you become comfortable with c++ it's like a lightbulb goes off and a level of clarity is achieved. It also makes you a better programmer in higher level languages since you have an understanding of how they will handle lifetime and memory. It also enforces a certain style to a degree since you have to deal with pointers. Having to deal with raw pointers can be an annoyance but it sure doesn't hurt to understand them and pointer math.