New Reply

useful programming languages to learn?

 
Share Thread Thread Tools
Dec27-12, 04:34 PM   #1
 

useful programming languages to learn?


The universe keeps (emphatically) yowling at me to learn a progamming language. As part of my research in computational biophysics I'm attempting to learn python as rapidly as possible. But I'm trying to figure out which languages are most useful to learn, and which languages I should learn, since the universe has also rudely informed me that my odds of becoming a researcher in physics are somewhere between 0 and 1, but waaay closer to 0 than 1.

C and C++ are mentioned frequently. My father is a bit eccentric but he makes his bread by programming in Scheme and feeding it to a C interpreter while working for a big tech giant. He vigorously suggests I learn scheme.

Any others? Would two languages suffice (C, python and scheme)?
 
PhysOrg.com
PhysOrg
science news on PhysOrg.com

>> Heat-related deaths in Manhattan projected to rise
>> Dire outlook despite global warming 'pause': study
>> Sea level influenced tropical climate during the last ice age
Dec27-12, 04:44 PM   #2
 
Recognitions:
Gold Membership Gold Member
Hi A & L

Honestly, I would think that learning to program very well in just one language would be sufficient. It is much less important which language you use. They all do the same things, they just use different "words" to do them. Once you know how to program in one language, it is relatively easy to switch to a new one.

That being said, sometimes learning two different languages will help you to understand programming concepts better. Seeing the way each language handles things can give you a lot of insight. Kind of like using two textbooks to learn a new subject (which I also recommend).

I think since you have a head start on Python, you should stick to it. C++ is also a good one, but if you think your dad will be a good resource in learning, then maybe the second language should be Scheme.

Best of Luck!
 
Dec27-12, 06:31 PM   #3

Astro/Cosmo 2012
 
Recognitions:
Gold Membership Gold Member
Science Advisor Science Advisor
Retired Staff Staff Emeritus
Saladsamurai's remarks are bang on.

Quote by Saladsamurai View Post
That being said, sometimes learning two different languages will help you to understand programming concepts better. Seeing the way each language handles things can give you a lot of insight. Kind of like using two textbooks to learn a new subject (which I also recommend).
The nice thing about doing some C is that it get you close to the hardware and lets you understand how certain things work that are hidden from you in a language like python. Scheme might help you to learn a style of looking at programming called functional programming: http://www.defmacro.org/ramblings/fp.html . C++ is a horrible, ugly, badly designed language that was scarred for life by design constraints such as the desire to make it backward-compatible with C.

Quote by Saladsamurai View Post
I think since you have a head start on Python, you should stick to it.
Yes. Many people who get through an undergrad CS curriculum actually can't program their way out of a paper sack in *any* language. Learn how to program in one language, python, and you're one up on them.
 
Dec27-12, 10:26 PM   #4
 

useful programming languages to learn?


Thanks guys! I'm actually quite fascinated by this point of view that many CS majors can't program worth beans, it seems utterly unexpected. A lot of my physics friends are panicking that they won't stand a chance against a full blown CS major, but I suppose I can tell them otherwise...
 
Dec28-12, 12:41 AM   #5
cgk
 
As others have commented, what you really want to learn is /programming/, not a programming language. And if you go into a field with "computational" in its name, you'd better learn it good. In order to become a decent programmer, you generally have to be "fluent" in multiple languages, as different languages are good for different problem domains. And in order to be a good programmer, you have to be at least a decent computer scientist (that means you need to know at least all the stuff taught in a BS course in Comp Sci, in particular algorithms and data structures to get started)

The most useful languages if doing numerics are likely Python or Matlab (choose one), C++, and C or Fortran (choose one). You should not start with C[1] or Fortran, as starting with either one will make you learn bad programming habits. You should start with Python, as this has the best effort-to-outcome ratio, and even when knowing only Python, you can get quite far. But you should be aware that there are things which simply cannot be done with it, many of which are important in fields with "computational" in their name.

About scheme: While scheme and common lisp are undoubtedly very powerful programming languages, you need to be aware that about 95% of the stuff they are good at can be done just as well in python (and much cleaner), and that if you seriously try to use them, you will quickly learn that you have to re-invent every single wheel (unlike in Python) and that you will be the only one in your lab using those languages. If you have some time, learn a LISP dialect by applying it to some toy project. It is fun and will make you grow as a programmer. But those are not good languages for everyday use, and nothing to get started with.


[1] (as most of C is a subset of C++, learning C is mostly a question of learning how the C++ constructs are actually implemented. Pure C itself is redundant.)


Edit: Yes, C++ is a horrible abomination straight out of hell (it is also a good example how you can arrive at a horrible result by doing only perfectly reasonable decisions.). However, it is still by far the best language for many kinds of applications, in particular all applications which call for *both* a software design (i.e., large applications) and raw performance (you can 100% performance in C++ if you know what you are doing). Most big applications in Windows, including Windows itself, are written in C++. There are good reasons for that.
 
Dec28-12, 08:39 AM   #6
 
Recognitions:
Gold Membership Gold Member
Python is the best place to learn programming, then you can move on to which ever language you please. I don't know what your level your programming expertise is, but Coursera will be running at least three free online Python courses in the next two or three months, two provided by University of Toronto (a "the very basics" type course and a "crafting quality code" type course), and one provided by Rice University (event driven programming and object oriented programming). Unless of course you have already taken them as they ran this autumn as well.
 
Dec28-12, 09:42 AM   #7

Astro/Cosmo 2012
 
Recognitions:
Gold Membership Gold Member
Science Advisor Science Advisor
Retired Staff Staff Emeritus
Quote by Arsenic&Lace View Post
Thanks guys! I'm actually quite fascinated by this point of view that many CS majors can't program worth beans, it seems utterly unexpected. A lot of my physics friends are panicking that they won't stand a chance against a full blown CS major, but I suppose I can tell them otherwise...
http://www.codinghorror.com/blog/200...s-program.html

http://codility.com/c/run/demo8ERZEP-A5Q
 
Dec28-12, 11:12 AM   #8
 
Mentor
For the record, I did the FizzBuzz program (from Ben's first link) in C++ in nine minutes. If I hadn't succumbed to "oh gee, maybe this would be a better way to do it" after I was halfway through, I would have finished in five minutes.
 
Dec28-12, 01:25 PM   #9
 
Udacity is a good place to learn python.
 
Dec29-12, 10:03 PM   #10
 
Quote by cgk View Post
About scheme: While scheme and common lisp are undoubtedly very powerful programming languages, you need to be aware that about 95% of the stuff they are good at can be done just as well in python (and much cleaner), and that if you seriously try to use them, you will quickly learn that you have to re-invent every single wheel (unlike in Python) and that you will be the only one in your lab using those languages. If you have some time, learn a LISP dialect by applying it to some toy project. It is fun and will make you grow as a programmer. But those are not good languages for everyday use, and nothing to get started with.

Do you think co-learning scheme while focusing most of my efforts on python would be a good idea? I was told that scheme will alter the way I think about solving many problems.
 
Dec30-12, 12:09 AM   #11

Homework Helper 2012
 
Recognitions:
Homework Helper Homework Help
Science Advisor Science Advisor
Quote by Arsenic&Lace View Post
Do you think co-learning scheme while focusing most of my efforts on python would be a good idea? I was told that scheme will alter the way I think about solving many problems.
I think you should concentrate on python to learn programming in general if you are new to programming. Co-learning anything else is fine. But if you don't get python you probably won't get anything else.
 
Dec30-12, 10:52 PM   #12
 
Ah okay, so far python is a breeze but it may just be I'm not pushing hard enough/working on any interesting projects.
 
Dec30-12, 11:01 PM   #13

Homework Helper 2012
 
Recognitions:
Homework Helper Homework Help
Science Advisor Science Advisor
Quote by Arsenic&Lace View Post
Ah okay, so far python is a breeze but it may just be I'm not pushing hard enough/working on any interesting projects.
That's probably the point about python. It is easy. It has sort of a minimum of syntactic formality about it and it's expressive. Take a python program and try to translate it into say, C++. Using STL classes will probably make it not that hard, but it's definitely a challenge.
 
Dec31-12, 03:15 AM   #14
 
To throw a cat amongst these pigeons, I think Java would be a good language to learn after Python.

This is because it is purely object-oriented and will teach you good project design. Its major limitation is its slow processing speed, but this is less of an issue nowadays than it used to be.

I am not a strong programmer, but I learnt on java and can still knock out useful code when I need to (this being said, i use python scripts daily)
 
Dec31-12, 11:02 AM   #15
 
I've heard from some that object-oriented programming is overrated. Is this true?
 
Dec31-12, 11:05 AM   #16
 
Quote by Arsenic&Lace View Post
I've heard from some that object-oriented programming is overrated. Is this true?
it's main strength is when coding in a group, so you can write code that uses someone else's code without needing to see their code.

I guess it would be overrated if you were involved in every aspect of the project and weren't worried about other people being able to use your code.
 
Dec31-12, 12:04 PM   #17
 
Since you mentioned using you're programming for computational biophysics then I'd suggest Java and by extension Groovy. Groovy is fairly new to the scene. Its a scripting language based on java using java syntax, able to call upon java classes and fully interoperate with java without the hard requirement of using the class structure for your program. It also supports functional programming.

I've used groovy with the Java Open Source Physics library (www.compadre.org/osp) as part of a graduate level computational physics course and it worked quite well.

Groovy is also the base language for Grails, a web application framework with backing database which could be useful as your get further along in your project and you need to export results to the web for others to work with. That route would extend you into the realm of javascript and HTML using jquery, jsxgraph and other notable software.

If you do go this route then I'd also suggest Eclipse or Netbeans IDE tools as they make life of a programmer more bearable and productive.

More info on groovy can be found at: http://groovy.codehaus.org/

and grails at: http://grails.org/
 
New Reply
Thread Tools


Similar Threads for: useful programming languages to learn?
Thread Forum Replies
About programming languages. Career Guidance 17
What languages to learn for Game Development? Career Guidance 8
Which programming languages might a physics major learn and why? Academic Guidance 28
Useful languages to learn in college Academic Guidance 5
Programming Languages Programming & Comp Sci 19