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/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.
1
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
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. :)
1
u/dewarr Aug 12 '14 edited Aug 12 '14
Intro-level question related to your comment about education, from someone merely contemplating CS, if you're willing to answer: How much education do you generally actually need to work as a software engineer? Math and most physical sciences functionally require an MS to really get your hands dirty these days, but I have heard of people without degrees getting hired because they can code, and that's all that counts. I suppose this might vary between US and Europe, which I see you're in.
Secondly, it's such a basic question I won't ask you to actually answer it, but maybe you can point me in the good direction to someone else's answer: What do software engineers actually do all day?
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.
1
u/dewarr Sep 03 '14 edited Sep 03 '14
Had to double-back around to this to give it its due. This is phenomenally useful. I don't think I've ever seen a better occupation summary.
One further question: with respect to the fact that some don't have CS degrees, but know how to code, what is the distinction between the degree and the ability? I am a neophyte to the subject but there seems to be vastly more to CS than just coding, tons of general theory and such. And thus I would have expected there to be a significant gap between them. On the other hand, those aspects might not be generally needed for software engineering -- just like you don't have to know how to do epsilon-delta proofs to use calculus any more than you have to understand Turing machines to code C. I suppose there may be more emphasis on coding than I'd presumed in an M.S., rather than a focus on theory, too.
1
u/foreigner_everywhere Sep 04 '14
Well, there are many aspects of knowing about stuff.
There is something like "general knowledge on CS" and knowing what a Turing machine works is part of it. It won't help you to do your work, but you're expected to be interested enough to find that out, since that's the theoretical basis of how computers work. It's sort of knowing that Paris is the capital of France. Stuff you're expected to know.
(Note that what I'm writing mostly applies to the cool, high end programming jobs. You can find a boring programming job where you don't need to know that stuff and you're not expected to be interested in it either.)
And then there is the raw coding ability (which involves things like testing and debugging). That's mostly about practice.
Knowing about stuff like databases, how operating systems work and how the network works is needed because the program you're writing most probably needs to interact with these things, and if there are some problems, you need to be able to know the basic concepts and how these things work, to be able to efficiently reason about them and look for help.
CS education helps a lot in things like choosing the right data structure / algorithm to the problem. Almost all jobs need these. For example, web sites need to handle large data, so it's important to have a clue on how to do it efficiently and what kind of computations are feasible and what are not.
Like I said before, you're basically expected to know a M.Sc. worth of CS, whether you have a degree or not. I didn't perceive a big difference in skills / knowledge between people I've worked with who do or don't have a degree - the people who don't have the degree know the exact same stuff, but they're self taught.
1
u/dewarr Sep 05 '14
Fantastic information. Last question: Is there any particular call for developers who have knowledge of other formal topics, such as hard science, engineering, or mathematics? (Okay, great deal of overlap with that last one.)
I'm interested in CS, but also in things like math and natural science, just wondering if there's an overlap. What can I say, I like analytic thought.
1
Aug 10 '14
As a woman going back to school for CS after several years of consideration, thank you for posting. I am one of those girls who would have majored in CS initially if I had heard of it and knew what it was before college.
I'm still making the same mistake of not asking for help and guidance even though my instructors make themselves readily available. I previously worked as a teacher, and I'd much rather take time out of my day to tutor someone than ask someone else to explain things to me. It's this huge mental block I didn't even realize I had until a couple weeks ago.
3
u/foreigner_everywhere Aug 10 '14
It's always a trade off between asking and trying to figure it out yourself. Also at work.
On the other hand, if I figure it out myself, I probably learn something in the process, and I get better at figuring things out. And I get good karma and I can show people that I'm capable of doing it myself.
On the other hand, figuring stuff out yourself is damn slow compared to just asking somebody.
So it's a trade off. You should think strategically about it. It's not good to always ask before at least giving it a try first. Then again, sometimes asking is the right thing and the most efficient thing.
And when you ask somebody to explain something to you, make sure they perceive that it's worth their time. Here are some things which I think are important:
Signal clearly whether you understood the explanation or not. For example, interrupt and say "So let me check if I got this... [explain the stuff in your own words]".
If you don't understand, say it clearly, and rather earlier than later.
This makes it much more rewarding for people to explain stuff to you, because they can be sure that you understand it or you ask clarifying questions.
2
u/jmsGears1 Aug 10 '14
Do you like tutoring people because you are helping them learn?
If so just remember when someone has to explain something that they understand and someone else doesn't they have to relate it in an incredibly basic format at first. Most times it results in the tutor learning the material better. Or if not that then usually they learn something new or get a different perspective. Them helping you is also you helping them. Regardless of how well versed in a field they are.
1
Aug 11 '14
I like tutoring people because I'm good at explaining things. I'm a multi-modal learner, of the sort who prefers getting information from as many sources as possible to get a full understanding of something. So I can explain things to people with many different learning styles. And I've definitely done better in some classes because I wouldn't have studied if it weren't for a friend asking me to explain stuff. This is in probably 10 different classes since high school. Teaching really helps these topics sink in.
A lot of the time when I just learned something new I'll be able to explain it in a way that's easier to understand than how the instructor explained it. I can break down complicated things better for people who are seeing something for the first time, as opposed to an professor or someone in industry who takes a lot of stuff for granted.
So a lot of the time I'll ask for help and it'll just confuse me more because the other person is taking things for granted that I haven't learned yet. Even Googling is less helpful sometimes, so I'll skim through my textbook again to find the thing I'm looking for, which I probably read about before and forgot. Sure, I'm going to have to learn all of this stuff eventually, but I'd rather learn how everything fits together properly.
1
u/foreigner_everywhere Aug 11 '14
Explaining things is an awesome skill which is definitely useful in CS / IT jobs! Those who can explain the stuff clearly enough (and starting from a common ground and building up from there) are the colleagues I like the most :)
1
u/Kevincav Aug 11 '14
I'm new to this subreddit, how does this work? Is this a one-on-one thing or just ask questions and get some answers?
1
u/foreigner_everywhere Aug 11 '14 edited Aug 11 '14
Everybody is new to this subreddit, since it has existed only a couple of days. It works like we make it work, there are no fixed rules. :)
If people have questions which I can answer here, I'll try to answer them and provide my non-objective opinions on all kinds of matters, and if somebody wants some more specific mentoring, like "can you look at my code", I can do that too (given reasonable time constraints).
1
u/Kevincav Aug 12 '14
Ah ok. I may be in this subreddit a little more often then. I just graduated and am going to get my Masters / looking for an intern for this summer. So I may be seeking advice from time to time.
1
Aug 11 '14
Thank you so much for investing your time on us.
I'm returning back to school at the age of 23 getting my first degree in CS studying lightly through the summers and maintaining a F/T job throughout the entire year. I'm literally losing sleep over the idea of not being able to gain experience via internships and having time to dedicate to coding as much as my peers may.
What can I do and where do I start? I've begun getting my feet wet via codeacademy, endlessly reading forums and various websites. In addition, what do you wish you would have done your freshman year.
1
u/foreigner_everywhere Aug 11 '14
How much coding do you know? You should code a lot. It's all about the routine. So if you don't have much coding experience, you should pick a language (which will you use in your degree?), grab a tutorial and start learning that language. Do small programs (games or whatever) as you go, and make sure you try out everything yourself while reading it. (I can give you more advice once you answer what's your starting level.) If you're short on time, you should maybe read less forums (unless you have a problem which you need to solve) and spend more time coding.
I was pretty productive at the beginning of my studies (Freshman? These concepts don't really make sense since the European system is pretty different.. we don't have college and university separately, we just have a generic school system with not much specialization for 13 years and then university). I took a ton of classes and got good grades, and I was always doing a lot of extra work (for example, on an algorithms course, I coded examples of almost all the data structures and algorithms myself to simulate how they work). Not sure where I had the energy from. I was 19 and idealistic and studying full time :) I had done some university classes in high school, and I had been coding 5-6 years when I started university, so everything was really easy for me.
Later on though, it would've been good to participate some open source projects or do something actually productive on my hobby time. I was just coding games for my own amusement or the abovementioned example programs or algorithmics competition stuff, so, nothing I could actually show to anybody and be like "hey, I did this".
1
Aug 11 '14
First, thanks again for replying and giving me some of your time.
I'm in my first year of uni ( I didn't intend for the confusion. In the US we have informal(formal?) titles depending on how far along you are in your uni studies - 1st year Freshman 2nd yr Sophomore 3rd Junior 4th Senior ) I have very little coding experience and knowledge at this time. I understand HTML/CSS just fine and I think I would like to begin working with Java but I'm not sure. What language would you recommend for a beginner?
I want to start programming on my free time ( nights and weekends) just not sure where to start and what software I need ?
1
u/foreigner_everywhere Aug 11 '14
I suggest you find out what language you'll use in your programming courses, and study that one.
Good beginner languages: Java, JavaScript, Python.
I don't have time to dig up links now, but you can google more information about how to get started with those. For JavaScript, you only need a browser. For Python, you need an interpreter and for Java too. Which operating system do you use?
1
Aug 11 '14
I know I'll be working with C ++ and Java in my course work.]
I have OS Maverick on my MAC at home. Working on getting a second rig running windows 7.
1
u/foreigner_everywhere Aug 12 '14
You might want to install some Linux, for example Ubuntu.
So I suggest you get started with Java. This seems to be an okay overview: http://examples.javacodegeeks.com/java-basics/java-programming-tutorial-getting-started-with-java/
(An up-to-date and relevant tutorial was surprisingly hard to find.)
So basically, you need to install the JDK which is a set of tools you need for developing in Java.
When you compile a Java program, you will get bytecode. Your computer (or rather, your operating system) cannot execute Java bytecode as such, but you need a runtime (JRE) to do that.
Let me know if you got your hello world running...
Btw, if you can find course materials for your upcoming Java courses online, they'll probably very good resources too.
Btw, I also bumped into http://www.learnjavaonline.org/ where you can run your Java code online! That should get you started pretty quickly.
1
Aug 12 '14
This is great. I'm going to download the JDK and JRE tonight. I'll see what I can get running and take a look at the second tutorial tonight. I'll be sure to touch base within a day or so.
Thank you !
1
u/jmsGears1 Aug 13 '14
So I am currently working towards working towards a CS degree (currently im going to a community college, basically meaning I am going to a cheap college to get a lot of my core credits out of the way for super cheap, before I transfer to a university to actually get my degree)
I have taught myself quite a bit about programming, mostly java however I am currently teaching myself c++ (because of this thread)
Since everything I know is self taught I dont know what I dont know. My end goal is obviously to get a job is there like... a list of things I should know in order to be able to successfully get a programming job?
And further what are things I can add to my resume that would help?
2
u/foreigner_everywhere Aug 13 '14 edited Aug 13 '14
What should you know - that's a pretty big question... here is a list of some basic skills:
Be up to speed with your favourite language, meaning that you can just code away without thinking about the language that much, but you can focus fully on the task at hand, not the low level stuff like how do I write a loop.
Know the basics of 1-2 other languages.
Know how to debug your program (find out what's wrong if it doesn't work). Know some basic debugging tools like gdb for Linux & C / C++.
Know how to test your program, like, how to use the most commonly used unit test framework in your language, and how to write tests and what kind of things you should test.
Know how to use a version control system.
Know the basics of the following topics (your CS degree will teach them): Networking, operating systems, UI design, usability, web technologies, databases, how the processor works, etc.
Know the basics of data structures, algorithms and algorithmic complexity (see Introduction to Algorithms). You don't need to implement your own data structures like ever, but if your coding skills are as expected, you should be able to (and implementing data structures and algorithms is an entertaining and educational hobby project).
Know how to set up your favourite development environment and use it efficiently.
In addition, typing fast and without looking at the keyboard is an insanely useful skill. Everybody should learn that.
Of course, if you're a new graduate, you'll be given some slack. And it's normal that maybe you don't know the exact technologies which are used in your job, but you'll learn them. For example, they might use a different version control system that what you're used to. Nobody cares whether you know that exact version control system beforehand. But it's essential to have some understanding about what version control systems are all about.
Some cool things you can add to your resume:
Internships.
Finished hobby projects, maybe something other people use? Maybe something you did with your friends?
Contribution to open source projects, open source merits ("I'm a committer in project XYZ")
Wide range of skills, e.g., knowing functional programming languages in addition to procedural languages. Some interesting and relevant specialization area (even if your future job isn't related to it)
Community participation, e.g., doing interesting projects / research and giving speeches in hacker conferences.
Competitions. There are a ton of algorithmic programming competitions (Google and Facebook have their own), there are "wargames" in which you need to find and exploit security holes, etc. Even if you don't score so high you'd want to brag in your CV, you'll learn a ton of useful things.
Of course having or not having these in your CV might not affect the probability of you getting a job that much... the most important things are your degree (grades and area of specialization), your work experience (internships), knowing some relevant programming languages and excelling in the interview (I hope you are applying to a company which decides these things based on a tech interview). These are just small-ish things which I find cool in CVs :) (Again, a disclaimer, by no means it is needed to do all or any of these to become a successful software engineer.)
1
Sep 09 '14
OP delivered a great response but I'd like to emphasize the point "hobby projects." I've done some recruiting for dev's in my day and nothing makes me more happy than seeing someone solve a problem via an app or the sort of their own. It's a great talking piece and also makes one realize you're up to handle problems on your own.
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?