Learning programming languages *split*

Haskell and Objective C are going to be the next for me. Haskell sounds cool for the future, I've read some professional programmers commenting on the fact that Objective C is hard to learn, but it's based on C and I am interested.

If you are familiar with the concept of dynamic OOP (e.g. Smalltalk) then Objective C shouldn't be too difficult (other than its eccentric syntax).
 
Drop everything and learn Haskell ! (if you can).

I'm struggling to justify the time for it so if you have some energy and enthusiasm use them for your own sake. You will step into a world of new and strange concepts and you will come out as a better woman/man afterwards. Of course, you may take it slow but don't give up this purpose you've set for you.

While a programming language is just a tool, you will hopefully see that being familiar with more such tools will make you a much more capable programmer anyway. And you will know to explain better why you prefer c# over java ;) . Being a proficient java programmer and having never used c# i can already agree with you that c# is significantly nicer :D
what you define of Haskell is what got me so interested in it in the first place.

I always wanted to be a programmer although life takes you to different paths and perfect plans never work, so no matter how perfect your plan and your path are, a perfect plan makes no sense, life is going to put bumps in the road.

To put everything in context... I am a very newbie to be programmer, with literally 3 months of "experience" while coping with real life and other subjects of my studies. My ideal was always to become a John Carmack or @sebbbi of the world, and I am not bad at maths though I am not a word person.

So, from my little experience being an autodidact at home -learning Java where I study- secretly learning C#....They are both OOP, and quite similar to C++ in some ways.

You must take into account that I am just getting into methods and some recursion for now, so there is a lot of stuff to learn.

Why I think C# is better?:

- Named parameters (that's a very nice feature) to keep track of the parameters you use in a method
- I hate the Scanner function in Java, it's so stupid and a two step pass that confuses me. I just prefer the Console.ReadLine(); feature --> Done.
- Linq (just starting to scratch it, but make your code more concise), Lambdas (starting to scratch it as well)
- Visual Studio and Xamarin Studio (for Mac, Windows or Linux) and SharpDevelop are IDEs that I favour over my default Java IDE (NetBeans and Eclipse).
- C# still uses primitive things like Goto , which is the outcast son of programming, but it is nice to have.
- There is an /unsafe tag in C# where you can write code into "unsafe" memory areas, pretty much like C, C++.
- Unity uses C# as a built-in language. And I want to create games some day.
- More variables. It has var (lets the compiler to find out the actual kind of variable you are trying to use), like u-something....

Both languages are multiplatform now --C# with Xamarin Studio. I mean, some C# games are in Mac, Windows, Linux, Xbox, PlayStation 4, WiiU, and Android, iOS phones.

If you have been using Java for a long while, learning C# might be a breeze for you, trust me on this one.

If you want to learn more about C# and the main differences, aside from the books I recommended, there is also another great book, "C# 6.0 in a nutshell", if other books like Essential C# 6.0 is too technical, or Begin to Code with C# is too high level for an experienced programmer which enjoys the lowest level "normal" native functions of a language and not premade stuff that eases learning from a newbie point of view --though this one book is excellent to learn some basic things a programmer should know and should never forget, plus the explanations of the exercises are top notch.
 
Last edited:
If you are familiar with the concept of dynamic OOP (e.g. Smalltalk) then Objective C shouldn't be too difficult (other than its eccentric syntax).
thanks for the advice. OOP is what I am getting familiar with so that's not a problem --Smalltalk I have no idea what it is though. Most of what I know about Objective C are based on opinions of professional developers with years of experience that said that it is a hard programming language to learn, and I mean programmers of AAA games for instance.

Still, threads like this are quite informative as to where to look in order to learn it:

http://stackoverflow.com/questions/5556754/good-example-code-for-objective-c
 
I have been trying to use goto since I started working but I always found a cleaner solution than using a goto. But I will keep trying until I change languages.
:start
start
goto start

try that for fun and get rid of the frustration of not being able to use goto, copy it to a bat file in a pendrive. Run the .bat file. Hint: only solution remove the pendrive asap.
 
If you have been using Java for a long while, learning C# might be a breeze for you, trust me on this one.

If you want to learn more about C# and the main differences, aside from the books I recommended, there is also another great book [...].

You misread a bit I think, I was just trying to suggest to you that the more languages you learn the easier for you is to compare them and to justify your comparisons to others. Like in your case of Java vs C# . Java has lambdas too now, otherwise your analysis looks fine, especially for a 3m xp guy ;)

As for me, I've been doing a lot of C & Java programming , I'm quite good with Scala (my job fortunately implies that I now write Scala at work) and I know some C++ & Python. I don't like Java (too verbose & gets you inside a corporate & enterprise world L( ), C (too type-unsafe) nor Python ( I tend not to like dynamic languages :p )

I'd like to learn Haskell, F# & Idris. Basically fell in love with highly abstract functional programming. Idris ofc is something even more advanced, as the language itself can assist you while programming. And it offers proofs of program correctness
 
Last edited:
There's also Elixir/Erlang.
Elixir is a functional language that has Ruby-like syntax with Erlang-like semantics, it's 100% compatible with Erlang and runs on the Erlang VM which is famous for its reliability, low latency, preemptive execution, distributed systems (actor model) and "supervisors" that can restart your programs if they crash or behave abnormally.
Elixir was created by one of Ruby's core developers and is gaining traction both in the Erlang and Ruby communities.
 
You misread a bit I think, I was just trying to suggest to you that the more languages you learn the easier for you is to compare them and to justify your comparisons to others. Like in your case of Java vs C# . Java has lambdas too now, otherwise your analysis looks fine, especially for a 3m xp guy ;)

As for me, I've been doing a lot of C & Java programming , I'm quite good with Scala (my job fortunately implies that I now write Scala at work) and I know some C++ & Python. I don't like Java (too verbose & gets you inside a corporate & enterprise world L( ), C (too type-unsafe) nor Python ( I tend not to like dynamic languages :p )

I'd like to learn Haskell, F# & Idris. Basically fell in love with highly abstract functional programming. Idris ofc is something even more advanced, as the language itself can assist you while programming. And it offers proofs of program correctness
You are lucky to know C, I guess, despite how flawed you find it.. As for Java, I couldn't describe it better til now, when you did. It's verbose and very oriented towards the corporate and enterprise world, it's kinda dull predictable and slightly boring, but it's taught for that reason too, although you can get the job done faster with other languages if they let you use them, but they dont. Again, lucky you that you use Scala too and you like it.

As for @rcf suggestions...,I've heard of Erlang, I find that name beautiful, but that's far as I know about that language.

Additionally, I tend to prefer "true" programming languages rather than web programming., although I try and I am learning HTML5, CSS3, XML etc etc
 
Last edited:
As opposed to the functional programming languages I've mentioned (Haskel, F# ), Erlang is dynamically typed. While we're at it, we can also mention Clojure as a dynamically typed, functional programming language which is said to be well designed as well.
 
The more languages you learn, the more you realise that design patterns are more important than anything else. Language go in and out of fashion because they force you into a new or different design pattern, but typically you could have used that pattern in most languages all along. The best patterns give great flexibility in what you use when. The popularity of a Haskell is because it forces you to be very pure in your functional programming, but for a C# developer you can integrate small parts of F# much more easily, for instance. And in turn, you can setup your C# code very much like a functional programmer would. Very likely you will also see C# adopt some of the new paradigms of F#.

Personally I am a big fan of simplicity and semantic clarity. An example is changing the date on a project. You can change the date, and then send the project to the backend, and then build logic there that checks if the date has changed, and then write logic that changes other stuff that might need to happen when a project date changes, or you can create a command/message that is called postponeProject that is collected by the UI and sent to the backend for processing through a command queue. Guess which is easier to write, test, and maintain when logic gets more complex? ;)
 
As opposed to the functional programming languages I've mentioned (Haskel, F# ), Erlang is dynamically typed. While we're at it, we can also mention Clojure as a dynamically typed, functional programming language which is said to be well designed as well.
thanks for the suggestions. It's the first time I hear about Clojure. As for functional programming, I think it's the best suited for my style, I think, but first is first.

Back into the 2 languages that a professional programmer who is a friend recommended me to learn, Java and C#, and since you know Java well, there is this Quora link with responses from senior developers who know both, and their replies are from December 2016 so it's up to date.

https://www.quora.com/What-are-the-major-differences-between-Java-and-C
 
The more languages you learn, the more you realise that design patterns are more important than anything else. Language go in and out of fashion because they force you into a new or different design pattern, but typically you could have used that pattern in most languages all along. The best patterns give great flexibility in what you use when. The popularity of a Haskell is because it forces you to be very pure in your functional programming, but for a C# developer you can integrate small parts of F# much more easily, for instance. And in turn, you can setup your C# code very much like a functional programmer would. Very likely you will also see C# adopt some of the new paradigms of F#.

Personally I am a big fan of simplicity and semantic clarity. An example is changing the date on a project. You can change the date, and then send the project to the backend, and then build logic there that checks if the date has changed, and then write logic that changes other stuff that might need to happen when a project date changes, or you can create a command/message that is called postponeProject that is collected by the UI and sent to the backend for processing through a command queue. Guess which is easier to write, test, and maintain when logic gets more complex? ;)
Your mindset sounds very well thought out, wish I could think like that some day. You sound like an artisan in a guild, artisan programming I mean, out of knowledge and passion from what you do. In regards to F#, while I never mentioned it because I don't want to bit off more than I can chew, I wanted to learn it to program GPU stuff and had some books to look for, but I thought it was just meant for that, GPUs (just in case I ever make a game), if it also serves the purpose of general programming and being Haskell style, functional, I gotta give it a try for GPU and general programming.... Tough (but doing something willingly, it never hurts) and fascinating times ahead in that sense....
 
F# is a ML style functional programming language. Which means it uses the Hindley–Milner type system, which is still state-of-the art, as far as I know (allowing programmers to omit type declarations they cant be bothered to write in the large majority of cases). F# is to C# what Scala & Closure are to Java. That means it can interoperate easily with C# code, so one can try having a partial F# codebase when it fits the problem/style more.

What F# is notably missing are higher-kinded types, something that Haskell & Scala have. This allows the some really powerful abstractions (e.g. monad & functors). For now I'm just a user of such abstractions can't say I can design anything as useful yet. So maybe the presence/absence of this doesn't impact me as much.

F# has no particular connection with GPU programming. There a few binding libraries from gpu to most common languages. What you've heard is probably that. Unless you are not confusing it with C++ Amp :p
 
F# is a ML style functional programming language. Which means it uses the Hindley–Milner type system, which is still state-of-the art, as far as I know (allowing programmers to omit type declarations they cant be bothered to write in the large majority of cases). F# is to C# what Scala & Closure are to Java. That means it can interoperate easily with C# code, so one can try having a partial F# codebase when it fits the problem/style more.

What F# is notably missing are higher-kinded types, something that Haskell & Scala have. This allows the some really powerful abstractions (e.g. monad & functors). For now I'm just a user of such abstractions can't say I can design anything as useful yet. So maybe the presence/absence of this doesn't impact me as much.

F# has no particular connection with GPU programming. There a few binding libraries from gpu to most common languages. What you've heard is probably that. Unless you are not confusing it with C++ Amp :p
oh well, I just thought of async computing and GPUs and that's why I associated it with GPU programming and taht's it. Plus I thought there were specific languages for GPUs....

Scala might mean life to Java, because I like to learn it for personal reasons, but on the other hand Java bores me with its verbosity, use of excessive functions and "too" solemn style, or "business" as you defined it.

@Davros , look at what I've found. http://csharp-station.com/6-best-books-to-learn-c/ (the other 5 books listed are good, btw, the one below...hmmmm)

Screen-Shot-2016-11-29-at-2.58.46-PM.png


https://www.reddit.com/r/eFreebies/comments/3r3bny/c_learn_c_in_one_day_and_learn_it_well_c_for/ (that's what they tell on reddit about the book)
 
Last edited:
async/await is nice, not sure I trust the runtime about its performance/memory footprint though ;p
 
Back
Top