Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Path to becoming software engineer?

  1. Nov 13, 2011 #1
    I am one semester away from graduating with an operations research major. I only learnt programming when I was in university, but grew to love it very much. Since I am currently considering my future, I realized that I am nowhere qualified for a job in the technology sector, so my first job will probably be in engineering.

    Experienced PFers in software and computing industry, please give me your advice about what I should learn and do in my free time, so that I can eventually move into the tech sector (I am primarily interested in writing commercial software for optimization and business analytics, but the software industry in general in fine too).

    Here is what I stand:
    1) Pretty strong in standard C and C++( I can do OOP and use STL effectively)
    2) Limited to console programming (don't know GUI programming, visual C++ etc) in Unix. However, I am proficient enough in it to be able to write optimization solvers (linear programming or discrete non-linear programming) or discrete event simulation programs.
    3)I don't know how to program practically in a UNIX, linux, windows, mac or web environment.
    4)I don't know much about computer organization nor computer networks in general, but enough to explain why main() must return 0, garbage collection, what happens with uninitialized pointers etc.
    5)Strong in the theoretical aspects of CS such as algorithms and logic. I got A+ for my 4 programming methodology/algorithms classes, and A for software engineering class.

    I have heard many fanciful stuff like ASP.net, VB.net, .NET, XCode from the job requirements descriptions of software developers. How and where should I start? I tried visiting forums and communities of developers but the terminology is just too daunting!

    As stated earlier, I am left with one semester in school, with just part of my dissertation left to write. For all practical purposes, I have no need to spend time in school until my dissertation defense.

    I could take extra CS classes in computer organisation or in Unix programming, but I could also do an IT internship while waiting for graduation. I prefer the latter, but I am not sure what company would be willing to train me.

    Sorry if it's pretty long- I would really like your advice!
  2. jcsd
  3. Nov 13, 2011 #2

    D H

    User Avatar
    Staff Emeritus
    Science Advisor

    Software engineering is not computer programming.

    That of course doesn't stop employers from calling their computer programmers "software engineers."

    Real software engineering is concerned with questions such as
    • What kinds of skills are needed for this project?
    • How many people are needed for this project?
    • What kind of development methodology should be followed for this project (waterfall (don't), spiral, agile, ...)?
    • How is to one to develop, maintain, and track a schedule for this project?
    • How is one to measure and maintain the quality of the product?
    • What standard practices should this project follow (or steer clear of)?

    As an OR major, you have probably been introduced to some of these concepts (but not with a software flavor) in your OR/IE classes. Others of these concepts such as various development methodologies are very software specific.
  4. Nov 13, 2011 #3
    Yes you are right, I was exposed to all these concepts. I did manage a good grade in my software engineering class, that talked about software architecture, project management, and development methodologies. But that seemed to be a very top-down approach to learning.

    I am more concerned with learning the industry-specific skills for the software development industry. IE questions such as
    -Do I need to learn other programming languages?
    -Which is the most common programming framework?
    -Can a non-CS major get into the industry?
  5. Nov 13, 2011 #4

    D H

    User Avatar
    Staff Emeritus
    Science Advisor

    It fully depends on where you want to go, what you want to do. There are no general guidelines. Some companies involved in computer programming only hire CS majors, others would never do so.
  6. Nov 14, 2011 #5


    User Avatar
    Science Advisor

    Hey ych22.

    As others have said, software engineering is not computer programming, but I won't talk about that again.

    For software development, the natural question is "What projects have you worked on?". From the answer to this, we will be able to give you more specific advice.

    It's not expected that everyone will have the same domain knowledge and even the same non-domain knowledge (data structures, general algorithms, etc), but then again each job is different and requires different skills which is good.

    It's funny you mention GUI programming because a lot of entry level programming jobs are doing just that: you might have to come up with a new GUI controller, or some GUI widget, or otherwise.

    Since you want to write software for optimization and analytics, you will have to understand the domain.

    Skipping all the stuff about project management, architecture, and all that technical jargon, you need to understand what this stuff actually does. Have you had any experience working with current software that is available? Is there already software out there that does what you had in mind?

    These are serious questions you need to ask yourself. It is hard to compete with a company that has been living and breathing a particular area for a decade or more, and you have to realize that companies invest a lot of money and time in getting the right tools and they see these tools as a long term investment and not something that changes with the flavour of the month.

    What I recommend you do after taking some time to survey what is out there, and have a play with what is out there, if you find an application that is not out there (or is done rather poorly), then if it is simple, I would make use of different platforms to do what you have to do. For example you might use something like MATLAB which does your number crunching, and then use a GUI package to render your bitmap, and then export that somewhere else like an email, or another program, or otherwise.

    Take a little time out to learn what is already out there, the advantages and disadvantages of each, and also take note of the SDK support if such support exists. What you will tend to find is that there are a few packages that become industry standards, and those packages tend to have some deep support for extensions in the forms of compiled binaries (DLL's), or a scripting interface where you can write script and this will allow you to interface between the packages public routines and other script source files/data. What can actually happen is that groups will be in the business solely for writing extensions for major packages and this can be beneficial for them as well especially if the package is an industry standard package.

    These kind of companies are wise because when something becomes an industry standard, the company offers training to businesses using their platforms, and if you are developing extensions for these platforms, you get the advantage of all of these benefits indirectly. Having said that if you do end up writing good extensions, you need to check out the legalities involved in doing this.

    So yeah to summarize: learn about what is out there first and get a feel of the major packages used, their strengths and weaknesses, and get a feel for the actual problems that are out there. If you end up finding an area to work on, start off small and specific. You can always build up your code and do more complex things later, but keep it simple to start off with.
  7. Nov 14, 2011 #6
    Well two projects come to mind

    1) I wrote a console program in C++ to simulate stochastic queuing models.

    2) For my current honors dissertation, I am working on a heuristic for the NP-hard optimization problem of Quadratic Programming (QP). My heuristic is being implemented in C++ too.

    Despite the underlying mathematical and statistical complexities of my projects, programming component involved only writing code in Vim and compiling them with GCC on a unix shell.

    To put it simply, so far programming (and writing software) to me only involves vim/macVim + GCC. I'm hungry to know the world out there =(
  8. Nov 24, 2011 #7
    You must love programming:
    If you're in junior or senior high, and you haven't yet explored programming, do so. If you're not interested in math or science to begin with, you should probably explore other options.
    Plan on getting a degree:
    With all the success stories of college drop outs becoming billionaire CEOs in the 90's, there is a certain lure that "as long as I think outside the box and have outstanding problem solving and programming skills I don't need a four year degree". It's difficult for entry level software engineers to obtain a position without a four year degree.
    Get the entire math you can in high school:
    Try to advance to college level math before leaving high school; you'll need a ton of math to complete any Computer Science program and Engineering program.
    Qualify your degree by what you want to do:
    If your love is game design and you wish to enter that industry as a game programmer, you'll need a Computer Science degree. If you want to work for IBM, Intel, Microsoft, Google, etc., then a Computer Science degree may be good for you. If you're looking to work for a non-technical corporation building mostly business applications, consider a degree in MIS (Management Information Systems) or one of the many business technical degrees now offered. This type of degree is best for most, because it provides management and general business skills and doesn't focus on a lot of information that will not be useful to most.
    Supplement your class work with personal research:
    Search job boards and note what technologies are hot and buzzing. The colleges simply can't keep up with everything, so you'll need to buy additional technical books and teach yourself.
    Unless you're planning to get your foot in the door through an intern position, try to find side projects while in school:
    No one wants to take a risk and hire someone fresh out of school without projects under their belt. Internships are great at taking care of this problem, but unfortunately a lot of students can't land an internship or do so only to discover they would prefer to work elsewhere. The only way to give yourself options is to find some non-classroom work to put on your resume.
    Develop contacts with software engineers:
    If possible try to develop some software projects under their guidance.
    Understand that software engineering is not the same as programming:
    Every software engineer knows how to program, but not every programmer is a software engineer. The principal difference is that software engineering is typically a group effort, with differing and often fluid roles and responsibilities for the group members. Engineering projects have timelines, release dates, and considerable interaction between people responsible for its various components.
    View more at: http://www.techyv.com/questions/what-skills-should-good-software-engineer-have
  9. Nov 24, 2011 #8
    Seriously? You seem very qualified for an entry level job in the technology sector.

    I knew about as much as you did when I was 18 and I walked into a software company's office in Manhattan and got myself a full time job (and I didn't even have a college degree, nor even a high school diploma). They didn't care that I didn't know specifically how to work with the APIs and tools they were using on a daily basis. I just showed them a few of my pet OpenGL projects, a few notebooks full of calculus and physics work, and they thought I was smart so they hired me; that's generally how it works (the work didn't even have anything to do with OpenGL or Calculus). What I needed to know to be a productive programmer at the company I learned while on the job.

    To beat on the "engineer" vs "programmer" idea again, since you seem pretty smart you can definitely get an entry level job as a "programmer" as it is, probably anywhere, and probably doing just about anything. You can work your way up to "engineer" from there. It only takes a few years; I'll be approaching that job title pretty soon myself.

    Maybe the rigors and rigidities of academics have told you otherwise, but getting a job is really very easy. Or at least that's been my experience over the last 5 years, and with 3 different employers.
  10. Nov 24, 2011 #9


    User Avatar
    Science Advisor

    That's better than what a lot of people have done.

    You're coding in a modern language implemented solutions to real problems which are not trivial.

    When you start as an entry-level programmer, you are not expected to be an expert. You have shown that you can actually code something up (you would be surprised how many people can not do even simple things), and if you have a good attitude and work ethic and a good communicator (both verbal and written), that will get you in the door in many places (not all though).

    Some people will require that you have worked on complex platforms in very specific domains before they look at the personal interview. Things like modern games and complex scientific platforms require this kind of thing.

    However not everything is like that: you might get an entry level job where you start off fixing bugs, writing UI widgets, or doing something with the test framework.
  11. Nov 24, 2011 #10
    Dear Victor, thanks for the encouragement. I have now clarified my thoughts. The following are my weakness and the actions I can take to overcome them. Could you help me prioritise them?

    1) Lack of general CS knowledge such as compiler design, code optimization, network protocols, database systems, computer organization etc.

    I have cleared all my requirements for graduation, save for my dissertation on heuristic algorithms for quadratic programming. I can take all the following classes in my final semester,
    Computer Organization
    Introduction to Database Systems
    Introduction to Computer Networks
    Computer Graphics
    Information Retrieval

    2) Lack of experience in software engineering, such as working on a commercial project.

    I could try to beg my way into a 5-6 month software internship during my last semester , because I have no need to attend school besides updating my dissertation supervisor irregularly. After the internship, I could decide whether software engineering is for me, or to go back to my undergraduate major.

    3) Lack of knowledge and grasp of modern development platforms and tools such as .Net, J2EE, Javascript, PHP etc. In fact I do not even know what I want to learn, only that I want to learn some of them.

    I could spend my last semester intensively learning at least one platform and its language, to come up with a program significant enough to showcase my interest in software engineering, to make-up for my relative weakness compared to CS majors.

    What option do you think is best? Thanks Victor.
  12. Nov 25, 2011 #11
    All three options look alright. I can't make that sort of decision for you.
  13. Nov 27, 2011 #12
    Minimize the classes that you need to take. Find an open source project and learn to code. Take a cell phone apart and try to make it work. Program eight hours a day.

    You need to find some project that excites you, because it's only by working on something that you find interesting that you will be able to sink the time that you need.

    Work on something that is related to your major.


    If you are working on QP for your thesis, then get your code into the NLOPT or scipy distributions.

    If you get good at one platform, then you can be decent at all of them.
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook