Sign in to follow this  
Concentrate

I need to branch off and expand my mind, any suggestion on new language

Recommended Posts

Concentrate    181
For about 2-3 years, I've been in school, I have mainly used C++/Java and some MIPS. I feel like I've been exposed to the same kind of OOP thinking and don't really know what else is out there. What would you suggest one to learn in order to expand one's way of thinking about problems. I thought about some language like maybe ruby or lisp or perl. I just need some advice. Thanks.

Share this post


Link to post
Share on other sites
JackTheRapper    150
Learning a programming language is like learning a linguistic language. Being a software engineer is like being an author. Learning Spanish doesn't make you an author, learning French doesn't make you an author, writing books makes you an author, and the more you write, the better you get. It's useful to have languages under your belt but IMO developing your software emgineering skills is extremely important. IMO having personal projects under your belt and on your CV demonstrates your real world competency and makes you much more employable for a variety of reasons. At that point your language choice becomes near-insignificant.

Sorry if that's way off topic but i thought I'd mention it nonetheless.

Share this post


Link to post
Share on other sites
Telastyn    3777
[quote name='King Joffrey' timestamp='1313858715' post='4851651']
Learning a programming language is like learning a linguistic language. Being a software engineer is like being an author. Learning Spanish doesn't make you an author, learning French doesn't make you an author, writing books makes you an author, and the more you write, the better you get. It's useful to have languages under your belt but IMO developing your software emgineering skills is extremely important. IMO having personal projects under your belt and on your CV demonstrates your real world competency and makes you much more employable for a variety of reasons. At that point your language choice becomes near-insignificant.

Sorry if that's way off topic but i thought I'd mention it nonetheless.
[/quote]

[edit] While it's true that practice is required to make you a good programmer, learning a distinctly different language (like mandarin vs english) will change how your brain interprets language and gets you concepts that simply don't exist in your native language, making learning new ones easier; just like programming languages. Learning distinctly different languages is a boon to any programmer.


For the OP: [url="http://learnyouahaskell.com/chapters"]Haskell[/url].

Share this post


Link to post
Share on other sites
NightCreature83    5006
[quote name='King Joffrey' timestamp='1313858715' post='4851651']
Learning a programming language is like learning a linguistic language. Being a software engineer is like being an author. Learning Spanish doesn't make you an author, learning French doesn't make you an author, writing books makes you an author, and the more you write, the better you get. It's useful to have languages under your belt but IMO developing your software emgineering skills is extremely important. IMO having personal projects under your belt and on your CV demonstrates your real world competency and makes you much more employable for a variety of reasons. At that point your language choice becomes near-insignificant.

Sorry if that's way off topic but i thought I'd mention it nonetheless.
[/quote]

Like someone mentioned above there are a few different programming paradigms and learning languages that use these will give you a new way to look at things. Haskell, Lisp and all its derivatives rely mostly on recursion and list manipulation, Prolog forces you to write logic statements and sets and relies on logic and set algebra.


So learning another language outside of your current programming paradigm has advantages as it gives you a new way to look at problems and come up with solutions.

Share this post


Link to post
Share on other sites
Serapth    6671
Functional all the way, if todays procedural langauges stop being the norm, it's functional that will replace them.

I would say either Haskell or F#. F# would be handy because you would have access to .NET libraries.


That said, for me after 15 years of programming this way, functional programming is a mind bender. Just getting the gist of LINQ is enough of a fight.

Share this post


Link to post
Share on other sites
Talroth    3247
Consider Python.

Very simple language to pick up, and very flexible. Personally I'm doing around 75-80% of all my code in python, simply because it works and is easy to use. The rest tends to be either domain specific languages, or rewrites of segments of Python code that simply needed better performance.


And a third for Haskell. It is an interesting language. I picked away at it, but got side tracked from learning more.

Share this post


Link to post
Share on other sites
Bregma    9214
There are only two programming languages: Fortran and Lisp. Everything else is a copy.

I didn't say they weren't improvements.

Oh, OK, there's also Prolog. When I was in school it was the New Silver Bullet that was going to be the Solution To Everything and We Would All Be Programming In It When We Graduated. I'm not sure if you can find it any more. You can definitely find Fortran and Lisp.

Share this post


Link to post
Share on other sites
inavat    317
[quote name='Serapth' timestamp='1313936182' post='4851898']
Functional all the way, if todays procedural langauges stop being the norm, it's functional that will replace them.

I would say either Haskell or F#. F# would be handy because you would have access to .NET libraries.
[/quote]

I'm curious why you feel this way. I've always felt that the imperative model is higher level than the functional model.

The human brain, at its very base level, certainly follows the functional model. In a super simplified sense, our brain really is one big mapping of inputs to outputs, i.e. a function.

When we have to accomplish tasks, however, we often work at a higher, imperative level. I know that when I get in my car, the first thing I do is close the door. Then I put my seatbelt on. Then I turn the key. etc. My functional brain takes care of all the low-level mapping of those imperatives.

Moreover, when we tell someone else how to accomplish a task, we obviously do it using the imperative model. This communication is exactly what we're doing when we program a computer. We are telling the computer the steps to undertake in order to accomplish some task. It happens that our computers, just like our brains, at their lowest level operate with circuits that are implementations of some elaborate function, mapping inputs to outputs. But at a higher level, most of us program our computers in an imperative way. In fact, even those of us who write code in functional programming languages eventually compile our code into imperative machine code.

So, if it doesn't make sense to tell your friend how to drive a car in a functional way, why do you think it makes sense for us to instruct our machines in a functional way?

Share this post


Link to post
Share on other sites
Serapth    6671
[quote name='A Brain in a Vat' timestamp='1314029585' post='4852365']
[quote name='Serapth' timestamp='1313936182' post='4851898']
Functional all the way, if todays procedural langauges stop being the norm, it's functional that will replace them.

I would say either Haskell or F#. F# would be handy because you would have access to .NET libraries.
[/quote]

I'm curious why you feel this way. I've always felt that the imperative model is higher level than the functional model.

The human brain, at its very base level, certainly follows the functional model. In a super simplified sense, our brain really is one big mapping of inputs to outputs, i.e. a function.

When we have to accomplish tasks, however, we often work at a higher, imperative level. I know that when I get in my car, the first thing I do is close the door. Then I put my seatbelt on. Then I turn the key. etc. My functional brain takes care of all the low-level mapping of those imperatives.

Moreover, when we tell someone else how to accomplish a task, we obviously do it using the imperative model. This communication is exactly what we're doing when we program a computer. We are telling the computer the steps to undertake in order to accomplish some task. It happens that our computers, just like our brains, at their lowest level operate with circuits that are implementations of some elaborate function, mapping inputs to outputs. But at a higher level, most of us program our computers in an imperative way. In fact, even those of us who write code in functional programming languages eventually compile our code into imperative machine code.

So, if it doesn't make sense to tell your friend how to drive a car in a functional way, why do you think it makes sense for us to instruct our machines in a functional way?
[/quote]



Oh, I agree, I actually find functional code extremely low level. The only reason I could see functional being the future is simply market momentum. Functional programming is a first class language feature of newer programming languages like D and F#, while existing languages like C#, C++ ( C++0x), PHP and to a lesser degree, Java have all moved to support first class functions. I believe Python has always supported and to a degree, promoted functional programming (never got heavily into Python, but I recall lambdas being exceedingly important ) With the rise of LINQ, the power of functional programming is easily demonstrated.

I don't actually see it happening, although I do see a blurring of the lines as time goes on, where functional code gets used more and more often.

Share this post


Link to post
Share on other sites
inavat    317
[quote name='Serapth' timestamp='1314031875' post='4852387']
Oh, I agree, I actually find functional code extremely low level. The only reason I could see functional being the future is simply market momentum. Functional programming is a first class language feature of newer programming languages like D and F#, while existing languages like C#, C++ ( C++0x), PHP and to a lesser degree, Java have all moved to support first class functions. I believe Python has always supported and to a degree, promoted functional programming (never got heavily into Python, but I recall lambdas being exceedingly important ) With the rise of LINQ, the power of functional programming is easily demonstrated.

I don't actually see it happening, although I do see a blurring of the lines as time goes on, where functional code gets used more and more often.

[/quote]

Yeah, I definitely see the usefulness of functional concepts within an imperative framework. For example, you might tell your friend: "Always stay 30ft behind the car in front of you." That's a functional concept.

I think the core framework will continue to be imperative, however, until we no longer are programming programs at all (because programs understand our words and create new programs).

Share this post


Link to post
Share on other sites
Serapth    6671
[quote name='A Brain in a Vat' timestamp='1314032367' post='4852391']
[quote name='Serapth' timestamp='1314031875' post='4852387']
Oh, I agree, I actually find functional code extremely low level. The only reason I could see functional being the future is simply market momentum. Functional programming is a first class language feature of newer programming languages like D and F#, while existing languages like C#, C++ ( C++0x), PHP and to a lesser degree, Java have all moved to support first class functions. I believe Python has always supported and to a degree, promoted functional programming (never got heavily into Python, but I recall lambdas being exceedingly important ) With the rise of LINQ, the power of functional programming is easily demonstrated.

I don't actually see it happening, although I do see a blurring of the lines as time goes on, where functional code gets used more and more often.

[/quote]

Yeah, I definitely see the usefulness of functional concepts within an imperative framework. For example, you might tell your friend: "Always stay 30ft behind the car in front of you." That's a functional concept.

I think the core framework will continue to be imperative, however, until we no longer are programming programs at all (because programs understand our words and create new programs).
[/quote]

In some ways, the additional of functional capabilities to procedural languages could spell the deathbed ( reduced usage ) of pure functional languages like Haskell, Erlang and F#. I mean, if you can get all of the upside of your language of choice [b]and [/b]a more mass market language with all of the benefits that entails ( bigger talent base, more supporting literature, wider adoption, etc ), why would you use a specialty language anymore? Then again, I suppose this is why general purpose languages like C++ and C# thrive, while specialized languages stay in the niche, with the possible exception of the prototype based Javascript and frankly it's success has more to do with being at the right place at the right time with the right features and political support than any particular merit of the language itself.

Share this post


Link to post
Share on other sites
Telastyn    3777
OT: Functional aspects may increase in languages, but I cannot see functional languages as they are now; or even the functional programming paradigm becoming commonplace. It's just too weird. You ask people how to do something, they'll give you lists of instructions. If you ask people what something is, they'll give you its components and traits. Programmers we have now can't even do that effectively. Increasing the level of difficulty isn't going to do anyone any good.

[quote name='Serapth' timestamp='1314033274' post='4852400']
In some ways, the additional of functional capabilities to procedural languages could spell the deathbed ( reduced usage ) of pure functional languages like Haskell, Erlang and F#.
[/quote]

F# isn't a pure functional language.

[quote]
I mean, if you can get all of the upside of your language of choice [b]and [/b]a more mass market language with all of the benefits that entails ( bigger talent base, more supporting literature, wider adoption, etc ), why would you use a specialty language anymore?
[/quote]

Because some specialty languages like Erlang can provide many guarantees and/or optimizations because of their specialization.

Share this post


Link to post
Share on other sites
ApochPiQ    23064
Functional programming isn't about "higher" or "lower" levels of abstraction than imperative programming. It's about moving along a different axis, one that most people's brains are simply untrained in. The point of learning FP is to stretch your mind so that you have a larger repertoire of techniques to draw upon when solving problems.

There are many analogues in other fields, including music, writing, cinematography, visual arts, sculpture, practicing law, running a business... the more techniques you have available, the more effective you will be. This holds true in programming, and learning functional techniques is a great example.

Put another way: learning FP is valuable precisely because [i]it is not a naturally obvious way to think about most problems[/i].

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this