I just found channel 9, been browsing through the content, and thought it would be a good idea to join the forums. I guess I'm what you would call a career changer, or at least someone in the process of changing, anyway. My BS is in Mechanical Engineering, but I'm currently attempting to get myself into software development. Why? Well, I've always liked it and it was actually my first career choice, but I went for ME back then following my father's advice.
Anyway, I'm learning C++ on my own from books and using Visual Studio 2010 as IDE. I love Visual Studio, BTW. In the past, I had used Borland Turbo C++ 4.5 to write a few small programs for my research while in college, but never really to a professional level. Now I'm giving myself the chance to go deeper and I'm loving it. I already signed up for classes at the community college. I think they start in January. I also want to learn C# and Java.
I wonder, however, how hard it is to get into software development when you're coming from another field, like me. Is it even possible or am I dreaming? I don't really want to go through another 4 years of college. I just can't afford it. Any advice?
If you don't have qualifications you're going to need experience. I would start an open source project to demonstrate my abilities -- it's something for your CV that a prospective employer can download and look at to gauge your ability. However this won't demonstrate your work ethic or attitude so you'll have to rely on something else for that (personal references probably).
You could also try small consultancy jobs to build up experience of writing actual solutions to other people's problems. Ask around people you know and see if there's any piece of software that would make their working lives easier. You might be able to undersell yourself on price to get the experience for the first one, then add that to your CV and try again. My first few jobs were a result of friends realising there was something I could write for them at work and convincing their bosses that I was cheap enough to give a go.
I came from a background in Biology, but got into writing software as part of that and partly as a hobby. If you're lucky you might find an employer who is interesting in you Mech Eng knowledge as well as an ability to write code; I was lucky enough to find a 'scientific software consultancy' for my first full time job who looked for PhDs in science with an ability to code. Try looking for software companies in the Mech Eng field and see if they want a trainee; you have a specific skill set and someone may be looking for just that.
Good luck and I hope you hang around the Coffeehouse.
Make sure your education covers the theory of programming and not just a specific language or two. A great skill to have is to understand the major parts of a language. It lets you quickly pick up pretty much any language.
Also, +1000 to Dr. Herbie. Program everything you can. Small projects, large projects, individual, team - get all the experience you can.
There is a lot of specialized software houses that hire SMEs (subject matter experts). If they write software that assists in medicine, they might have doctors on staff, etc. That's a good way to get INTO a software house without any real experience. Once you are in, you can get creative on how to become a software engineer, I think most organizations would be trilled with a SME that can also program.
@MyLifeinCode:I am a Mechanical Engineer as well, and managed to make the hop pretty effortlessly. After coding for a while, I tend to get more research oriented work. Things like CAD have enormous application in a lot of fields.
Right now I am working in the bio technology sector, even though I have no (well, a little now...) knowledge of biology (my boss is a chemist).
Remember that engineering is an applied science, and you can use it pretty much anywhere. I trained in C++ at college so you just need a couple of years or so commercial experience. If you can display a basic grasp of the basics of programming, a lot of companies will choose you for that engineering bent, so that will always work in your favor.
@Dr Herbie: Thank you very much for the advice. So, how does one go about getting involved in an open source project? Are newbies welcome? I know just enough C++ to make simple programs and I'm learning more and more every day. Should I try to get involved now or wait until I acquire more skills?
@spivonious: Well, the classes I'm signing up at community college are part of a certification of achievement program they have (not MS though). They cover subjects such as Intro to Computers and IT, intro to programming using C++, Discrete Math, OPP using C++, Intro to Assembly Language Programming, Programming with Data Structures OR, Java, Data Communications and some electives. I'm not sure if they have a class on C#, but I got myself a good beginners book and they also have classes on .NET. Do you think that's good to cover some basics and get started? What else should I learn?
@Bass: @vesuvius: Thanks for the encouragement and sharing your experience! It gives me hope! It would be really awesome to get into CAD development! One more question... A person that works for a company that designs chips for TV and Blu Ray and all that keeps telling me that embeded software is the way to go. What are your thoughts on this and what exactly is embeded software, how different it is from developing software applications for the computer, like windows applications, for instance?
C# is just like C++, but, easier. So, once you learn enough C++, you can try C# yourself. I learned C# on my own. C# is easier in the following ways, no need to allocate / release memory manually as you did in C++. If you ever used ref/out parameter type, it will force you also type ref/out in method call, thus, you wouldn't get confused by your own writing. I am mainly C# programer now.
Also teach you a little trick.
//*/ Do this to enable code.
/*/ Do this to disable code.
This is one little trick that can toggle your code easily.
There are many fields you can do, and they all requires different skills. If you want to be a programmer specifically, familiar with basic data strutures like Linked List, Heap, Tree, and etc. You don't have to code them in reality. However, you need to know their structure and performance, so you would know how you want to apply them in your solution.
I recommand C++ and SQL as two main focus. If you know C#, you shouldn't have too much problem with C# or Java. SQL is a lot different, but, in the age of cloud, database, and etc. SQL is very important if you want to be involved with server related business.
Honestly, if you want to do embeded system, I prefer you to be an electric engineer. Their job is more stable than "micro programing". They used to code in assembly or completly in bits, but, I believe industry it going to move away from that. Most of them probably already moved to C and they will move to something easier because they want to include those fancy stuff in TV.
If you are electirc engineer, it is mainly "statistics". If you are good at that statistics, you are already in good hands.
Lots of information in this book. I find myself skimming over it but that's only because I learned most of what's written in college.
Embedded programming is a little harder because of limited resources, and can be more "low-level" than desktop or web programming. There will always be a market for it, unless people stop buying cars, electronics, and TVs.
@MyLifeinCode: Embedded systems are the way to go if you enjoy that type of programming i.e. typically against hardware. Most of the protocols are very old and being a master does take some time. There ultimately is a lot more engineering when you are dealing with protocols, but distributed development does test you as well
Learning C++ should give you enough knowledge to program in most of the popular commercial languages. The main thing is to try and find something that interests you and get that you can write, get up and running and working. Programming is a bit like an artist, where all your past creations all add up to making you employable. Just make sure you complete the college course and write as much as you can. You should be able to apply for graduate jobs, and someone will go for you because of your engineering background.
C++ is a great language to cut your teeth on since it provides low level (close to the hardware) as well high level abstractions (objects, types, vectors, templates, etc). You should also learn functional programming (so play around with F#, too - you have VS2010...) to expand your mind and improve your compositional skills. Finally, take some CS courses on the side to improve your theoretical understanding which will inform your coding and program design practices (maybe write your own compiler as a stretch project).
To get a gig at a software company, you will need professional experience (as well as very solid coding chops), so consider internships to get your feet wet and learn on the job. Then, find a place that seems like a good fit and try it out. You could start off as a tester so you stay close to the code and experience real world software project life. Most importantly, you'd be able to learn on the job and hopefully be mentored by seasoned devs.
Stick around C9 and share your progress. You'll also learn a lot here.
@MyLifeinCode: You might look into the course "The Elements of Computing Systems: Building a Modern Computer from First Principles". There's a short video here, (also linked from the first link), that explains how they literally go from NAND to Tetris, building a computer (on a VM), the language, everything. When I heard about it, I found it fascinating, and it would be the way I would teach someone new to programming (i.e. if I ever have a child who is interested). They provide most of the chapters of the book for free, and powerpoints, and sample code are available. I think for someone wanting to learn embedded systems, this kind of course teaches you basically everything about a computer, VM and languages from the ground up.
Well, after going through the whole process, jumping through hoops, and following all the rules, I was finally allowed to register for classes for the Spring semester. By then, most of the classes were already full and had a long waitlist, so I only managed to get myself into Java. I guess it's OK, but I really wanted to start, at the very least, with the intro to CS and C++. I guess nothing prevents me from studying that on my own while I'm able to get in the classes next semester.
@CaRDiaK: Thanks for the suggestion! It looks like a great book. I already ordered it, plus another one on algorithms that someone else suggested I should also read.
@Richard.Hein: Thanks! I'll check it out. Anything that can help is welcome! I realized I've begun to collect my little library, with lots of books and online info. I guess that's a good thing!
@Charles: What is F# used for? I'm amazed at the tremendous amount of languages out there! While looking for information the other day, I ran into some links about Python. What is Python used for? This is exciting, but it can also be overwhelming. Too much information I wish I could get into my brain really really fast, but I know it's all a process.
Comments have been closed since this content was published more than 30 days ago, but if you'd like to continue the conversation, please create a new thread in our Forums, or Contact Us and let us know.