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!

From simple scientific computing into beginning development

  1. Nov 22, 2013 #1
    Hey guys I need some advice: Im a Math/Physics freshman whos pretty much a noob to programming in general; I have some experience with Fortran (taught as part of laboratory) and Python (self taught) but only in the context of elementary numerical methods / scientific computing. I have basically no clue about actual computer science (e.g. algorithms, architecture, systems, networks etc) or software development but would like to begin to learn it as a hobby. My goal for now is to be able to at least begin to learn non-trivial stuff in actual real world development (e.g. games, apps, systems, web etc), the only problem is I don't know where to start / how to go about it. I live in the UK so I can't take computer science and development courses at uni (only allowed a strict range of Math/Physics courses for my degree).

    I get the impression that the first thing I need to do is to learn a popular language like C, C++ or Java. Since Im interested in actual computer science, I reckon C would be best since it's a middle level language? However, programming texts only teach you the syntax of the language, how do you go about learning actual development? I mean Ive been looking for non-trivial projects in Python but the little Ive found seems to involve things like advanced GUIs, databases, networking etc which I don't know.

    I guess what Im asking is, once you learn a popular/used language, what then? How do you enter, or at least approach, the world of real world software development?
  2. jcsd
  3. Nov 22, 2013 #2


    Staff: Mentor

    I would suggest Java as all major software companies have moved in that direction. You can do all sorts of generalpurpose programmingwith and there are tons (tonnes) of libraries around to extend the core java. Also you should look into learning Eclipse or NetBeans IDE. These are the tools of professional programmers they primarily support Java but also have plugins for C and C++.

    If this feels somewhat daunting or you dont have the time then check out Processing.org. Its a simpler IDE based on Java and designed for doing interactive graphics. You'll find its quite easy to use and you'll learn Java and OpenGL apis for graphics.

    In addition, Processing has support for Android development although you must install the Android toolkit and it has support for Javascript (which is java-like but isn't java at all).

    And I forgot to mention that Processing comes with a ton (tonne) of examples. It could be easily used to create moderately complex games.

    Writing a game involves several areas of CS namely graphics, user interface design and database development for persistent game play and for multi-player games where persistence is a must.
  4. Nov 22, 2013 #3


    User Avatar
    Education Advisor
    Gold Member

    I hope you realize that it might be years of studying CS and programming before you are actually able to create any real world software. Since you can't take the classes for credit, can you audit some of the CS classes at your uni? Courses like data structures, some language courses, what have you, would go a long way into helping shore up your understanding.

    You actually have to learn some CS.

    C is a high level language, the high level languages only differ by levels of abstraction/programming focus. There is no such thing as a mid level language.
    Last edited: Nov 22, 2013
  5. Nov 22, 2013 #4
    There are are loads of examples of CS profs that use the term middle level programming language.

    You simply google "middle level programming language" and you find that there is such a thing as a middle level language.
  6. Nov 22, 2013 #5


    User Avatar
    Education Advisor
    Gold Member

    Middle level in the context of what? When C hit the scene, it was a high level language. Just because we have more managed languages that abstract further from C doesn’t mean we need to create a special category for it. It’s still a high level language.

    Unless of course we don’t mind ending up with a thousand different categories as new more abstracted language continue to pop into existence.

    “Hey man, what kind of language was Java again?”

    “I think its middle high low level now, but I’m not sure”

    Lets get back on topic.
  7. Nov 22, 2013 #6
    Thats exactly what is happening (a continuous/relative scale) and generally humans have no problem dealing with a continuous scale instead of a binary option. It is actually preferable for some because it allows one to decide what level of abstraction they want to start learning from.
  8. Nov 22, 2013 #7
    I am planning on asking my tutor/professors if it is possible to take optional courses, the problem is that all my Math/Physics courses are compulsory so I won't be able to do much optional things anyways. I realize that I won't be creating real world software any time soon but I still want to learn the material to at least be able to understand the code for actually useful stuff even if it is very basic software.

    I enjoy coding and am interested in computer science, but Im slightly more interested in Math/Physics; unfortunately here in the UK I can't do all the courses that simply want to (you guys in the US are lucky, the flexibility of uni there is on another level). In the end if I decide to attempt to become a developer, I guess I will probably go to graduate school for CS (in the UK, some unis do offer taught graduate programs, Msc, in general CS for non-CS graduates) but can't I learn more serious CS than language syntax? I guess even more specifically what Im asking is how to go about self teaching myself essential CS (through texts etc). It will probably be difficult but I don't think its impossible. Ps I was torturing myself with undergraduate analysis texts back in senior highschool and dont have much of a social life so it won't be that much of a bother for me.
  9. Nov 22, 2013 #8


    User Avatar
    Education Advisor
    Gold Member

    You don't have to actually take the classes if it's more for your personal knowledge, but in the US we can audit/generally just sit in classes and listen to lectures. I don't know if this is possible in the UK, but it might be a good alternative for your situation.

    The difficulty of learning CS from a book is you generally have no one to give you feed back on your code/methods. Syntax is easy, it's also easy to program like a cowboy and just get stuff to compile. It's much more difficult to get into the nuts and bolts of things without some type of guidance and feedback.

    This is my personal opinion and may not be accurate for you. Look into the equivalent of data structures class and see what material your peers are learning from.
  10. Nov 22, 2013 #9
    One of our (best) professors Lawrence Angrave (who coincidentally did his undergrad/masters/PhD at Oxford in Physics) is about to launch a course on Coursera for developing Android apps which can be found here:


    I don't know much about this course but I do know Angrave. He's totally bent, extremely knowledge and very entertaining. His class at our school is very tough but a lot of fun and incredibly enriching. I'd definitely take a look at that course. Since I imagine you've already got a lot on your plate it might be more interesting to do something 'fun' rather just add another class to your load.

    However, if that doesn't interest, there's a TON of resources for learning to develop software and learning CS. It must be the most freely and abundantly taught subject ever. MIT has an intro CS course up. Stanford does, too. Stanford also has a data structures course up.

    Learning to code is like learning to play the guitar; just pick up and start playing some chords. Or, it's like learning math. How do you learn math? It's so huge. You learn the basics then you just start learning what you can where you can. Maybe you get your own voice along the way. Don't worry to0 much about 'which language'. CS is ideas. Languages are just (meager) tools. People who get hopped up about languages are missing the point.
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook