1. Limited time only! Sign up for a free 30min personal tutor trial with Chegg Tutors
    Dismiss Notice
Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

What is considered respectable coding abilities in industry.

  1. Mar 23, 2013 #1
    I will be an incoming PhD student this fall. I was wondering what programming skills I should pick up while a grad student. I was also wondering if someone could post an example code of what is considered good in industry.
  2. jcsd
  3. Mar 23, 2013 #2
    This is too disambiguous of a question... (1) Which field are you doing your PhD in, physics? (2) Is there a specific programming language or programming paradigm that you are looking to focus on. Object-oriented? Functional? Or a numerical language like R or MATLAB? (3) What programming skills are you looking to develop? Algorithms? Design patterns? Compilers? Optimization? Project management?

    For physics, I guess I would look at numerical languages (R, MATLAB) for starters. Each has its community with plenty of rated file uploads. I would also take a look at numerical libraries such as:

    Eigen (C++ 98): http://eigen.tuxfamily.org/index.php?title=Main_Page
    ALGLIB (C#): http://www.alglib.net/
    numPy (Python): http://sourceforge.net/projects/numpy/files/NumPy/
    JBLAS (Java): https://github.com/mikiobraun/jblas

    Some obvious examples of project management are:

    The Linux kernel: https://www.kernel.org/ or https://github.com/torvalds/linux
    Mozilla source: https://developer.mozilla.org/en-US/docs/Developer_Guide/Source_Code/Downloading_Source_Archives
    Chromium: http://www.ohloh.net/p/chrome [Broken]
    Last edited by a moderator: May 6, 2017
  4. Mar 23, 2013 #3
    Yeah, sorry I wasn't very specific in my first post. Actually I will be doing a PhD in Energy Science with focus on nuclear materials. I guess I was looking for advice with regards to numerical languages for algorithms, design patterns and optimization. Thanks meanrev for the pages and I will be sure to check them out.
  5. Mar 23, 2013 #4

    Vanadium 50

    User Avatar
    Staff Emeritus
    Science Advisor
    Education Advisor
    2017 Award

    You should learn to program. That's an entirely different thing than knowing a language.
  6. Mar 23, 2013 #5
    It helps if you can find out what languages and libraries are popular in your department. Choosing a popular language increases the number of people you can ask for help, but it is not essential. If you can solve some numerical problems in your favorite language, that's an excellent start. Examples: diagonalize a square matrix, chi-squared test the fit of a function to some data points, integrate an ordinary differential equation. If I had known how to do those things when I started grad school, my classes would have been 1000% easier.
    I think these are good suggestions. At my department, Python/NumPy/SciPy and Maple are popular. I like SciPy but hate Maple and use MATLAB and Mathematica instead. I really like Eigen, but I think I'm the only person at my university who has ever used it!

    As for what's considered respectable outside of academia... I've been in grad school for the last several years, so I disqualify myself from answering.
  7. Mar 23, 2013 #6
    No problem, I wasn't calling for an apology!

    I'm not familiar with energy science or nuclear materials, but at the end of the day, it's most likely that you will end up using the most popular language at your department for most of the time (I'm guessing it's probably going to be MATLAB, lots of numerical analysis and BVPs). I'd take a look at old syllabuses of computational courses you're probably going to take, to get an idea of what's popular.

    Thereafter, I second both Vanadium 50 and NegativeDept's advices. In the long run, I would rather focus on better programming skills than better domain-specific knowledge of a particular language. It's like an investment with better long-term yield.

    This means things like:
    - Learning a text editor like Vim, Emacs - and remember to tune your editor to your preferences, e.g. low contrast color scheme.
    - Learning to use source control (pulling any of the open source projects that I mentioned is a way to start)
    - Learning productivity tools and ideas such as in The Productive Programmer (Ford)
    - Equipping yourself with a couple of power tools in http://www.hanselman.com/blog/Scott...DeveloperAndPowerUsersToolListForWindows.aspx
    - Learning LaTeX (this has been the single biggest time saver for me)
    - Building GUIs

    I hate Maple. I think MATLAB has a similar substitute called MuPAD in the symbolic toolbox, which I've used for linear programming. Good to hear about Eigen.

    This is a good point, I can't say I'm familiar with what goes on outside of academia.

    Lastly, deciding on a language is probably least important as Vanadium 50 said, but it's oddly the one question you will keep asking yourself each day as you get better (at least I do; every time I have to use a Python script to generate a C++ source and a shell script to compile it, interop Fortran and C#, manipulate strings in MATLAB etc.). C++ is probably the most employable skill in my industry, and probably most others. I generally think that someone who can program in C++ will be indifferent to programming in other languages. There are plenty of guys who can write in Java, Objective-C, Python etc., because these are relatively easy to get into, so the competition is tougher. In contrast, very few people know low-level optimizations and scaling a large number of processes across nodes.
  8. Mar 24, 2013 #7
    Thank you so much for the help guys, especially meanrev! This is great, I now have a good starting point to get my *** in gear.
  9. Mar 25, 2013 #8
    You're welcome.
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook