I'm learning algorithmics and object-oriented concepts (personal interest, no job pressure) and I was planning to learn Ocaml and Ruby as first languages before hearing about Fantom (while looking for some Ocaml, Ruby and Scala comparisons).
I feel like (=I may be wrong there) Fantom's many features and limited documentation/tutorials make it an adventurous choice as a first programming language.
Fantom website says "Java and C# programmers will feel at home with Fantom's evolutionary syntax". Is this syntax familiarity helpful enough to justify studying Java first ? Which languages accessible to a beginner can be a good starter prior to Fantom learning ? Can a book covering several languages (like "Seven Languages in Seven Weeks") be a good preparation for a healthy Fantom encounter ?
Thanks in advance.
PS : I'm also actually on XHTML, CSS and Javascript planning to have some fun making Android apps and better understanding of TiddlyWiki.
ahhatemFri 1 Apr 2011
Hi altiplano,
Welcome to Fantom...
Actually Fantom is a very nice language... I didn't really understand what to u do for living and whether it has any relation with software at all... any way I hope you have all the fun.
First,I DON'T recommend beginning with Ocaml, to be honest I don't know much about it, but my recommendation is to either begin with a mainstream language...like java, c# or ruby or something special like Fantom,... IMHO, Java is tedious and have some very annoying features but is mainstream that mean you could find a job with java... ruby has a terrible performance something like 30x java for example, but has a beautiful syntax and is fun to use but less jobs than java... In this field java is sort of a legacy but and extremely huge legacy that will stay an active market for dozens of years.
To me, Fantom is the best of java and ruby combined... the best of both syntaxes, the best ideas... besides the Fantom FFI (feature allows you to interop with java libs and classes) is very nice in using the java libs fortune and not being trapped in pure fantom libs.. And Fantom has a great performance, actually comparable to java and scala..
Fantom is a lot easier than scala and a lot less error prone... you may shoot yourself pretty easily in scala... Ocaml is a somehow a niche lang that usual people don't use, It is rarely used in commercial software... some system programming .. stuff like that.
If you are not learning for investment to find a job, learn Fantom it is really great, If I would have found it earlier I would have used it in many cases....
Good luck... and have fun!
altiplanoSat 2 Apr 2011
Hi Ahhatem,
I understand the criteria of job market value of the different languages but as my present interest in programming is not driven by professional matters this criteria has low priority for me.
So I was first looking for a language or two that could give me good habits and ways to conceive programming, while not being too harsh to learn, so avoiding being discouraged or disgusted in the process ;-(
Hence my question about Java before Fantom, as Java does not look quite... well... funky :-)
DanielFathSat 2 Apr 2011
Hi altiplano. I'm glad you took interest in Fantom, as for it being a first language I'm divided a bit. On one side it's a great language that is to my liking on the other hand it might be too good for you, just don't take this the wrong way ;) Fantom takes care of many, many nuances while programming, which is great when you are experienced but may surprise you when you are a novice. So in my opinion, you need to start lower level. Don't take Java or C# or even Scala.
Your first language should be C. C is NOT a user friendly language. C is hard, C is low level, but C will help you realize how computer software really works. Once you get pointers and references and stacks you'll have a much cleaner picture how everything comes together to make language/code. After C I'd say either jump to Java or C# and then Fantom (maybe study a bit Lisp after C to get the whole functional programming).
Why I'm telling you this? If you simply start from Fantom you'll be annoyed by some things and maybe find it hard to jump to a lower level language (which are in demand). Once you start lower lever and go up, you'll still remember lower level while at the same time appreciating all the tiny things Fantom or Java does to make your life easier. Think of C as one of those needle mattresses and Fantom as a nice and soft one. Once you get you used to a bed of needles sleeping in a plain bed won't be hard, but not vice versa.
Oh yeah, I highly recommend steering clear of "Learn X languages in X days". To know a language you need at least five years. To skim it superficially you probably need a week or two. In one day you can't even learn a variety of Lisp.
PS. Why I haven't recommended assembler or machine language. They are waay to low level and they are usually highly platform specific (especially the machine language which is basically hexadecimal). They are more for those that want to know how hardware works than how software that relies on hardware works.
yachrisSat 2 Apr 2011
With all due respect to DanielFath, learning C as a first language is horrible advice.
It's a bit like telling someone to learn to drive in a Formula 1 car, at racing speeds, without seat belts.
In fact, C is (just like assembly) really too level a language for a first language. I agree (somewhat) that it's reasonable to learn at some point, but it can ingrain bad habits (like poor encapsulation) and incorrect views (like "C is the fastest language because pointers are direct access to memory!"). Plus, handling pointers, and pointers to pointers, etc. that early on is just asking for way too much confusion.
For a first language, you want something that AT LEAST gives you array bounds checking. That's something that can be really hard to find, and a primary mistake beginners make.
I think that Java is probably a pretty good choice, just because there are lots of good beginner, introductory books on Java (my wife liked the "Head First Java" book when she got back into programming). The compiler catches a lot of things, like usage of uninitialized variables, that are a lot of help to the beginner. Oh, and there's lots of good free tools (Eclipse, NetBeans, etc.) that make the beginner's life easier.
Fantom is fantastic, and maybe someday there will be good introductory material and tools to make it more of a reasonable first language. Keep it in mind for a second language, once you feel competent with Java. Java is NOT perfect, and Fantom addresses a lot of Java's shortcomings, but it's worth understanding that before coming to Fantom.
And enjoy programming... there are a lot of fun things on the web, particularly if you search for "programming puzzles".
DanielFathSat 2 Apr 2011
To paraphrase Stevey: "Do uglies, do them fast".
If you want to be a professional I'd definitely recommend going C if not the first then amongst the first. C is an incredibly hard language. Once you grasp C no other language (in strucural paradigm at least) will be a problem. Starting your language experience with Java will leave you blind to certain aspects like the infamous Schlemiel the Painter.
If you start in Java, going back to C would be hard. Kinda like using IDEs and then having to rely on Notepad++. Chances are you are gonna drop Notepad++ and C because you are used to better more friendly enviroment.
BTW my first language was Basic so I'm probably scarred for life, beyond repair ;)
andySat 2 Apr 2011
BTW my first language was Basic so I'm probably scarred for life, beyond repair ;)
That's where I started - MS Basic and DOS on an 8086 with 640k of RAM - ah the good old days :)
DanielFathSat 2 Apr 2011
Actually I started with C64 basic :P And then jumped to pentium 2 (once C64 died).
Managed to make a racing game for Basic... And a little useless malware (he blocked computer when ran). Ah yes, life was good.
PS. Yeah I totally recommend Head First series, it's perfect way to dip your toes into language/platform.
heliumSat 2 Apr 2011
I'm against starting with C. If you want to learn programming (design, algorithms, data structures, ...) a high level language is more useful, if you want to know how a computer works assembler is the way to go. C sits somewhere in between. It hides some stuff like registers, but still let's you work with memory addresses, ... it makes a lot of stuff that could be simple a pain in the ass, but not as much as it is in assembler.
Learning C at some point isn't a bad idea, but I don't see the point in learning it as first language.
altiplanoSat 2 Apr 2011
I read the article linked by DanielFath (plus one about JavaSchools there too) and I see the virtue of the Karate Kid philosophy and the butterfly effect risk of being ignorant of some core principles discussed in it. I'm likely to start with an higher level language but I'll stay receptive to articles like that, it's useful to know one's limits.
Thanks folks. Now give me some months :)
cbeustSun 3 Apr 2011
The idea that "Basic scars you forever" needs to die. It's just not true.
Take a look around at all the people you admire in the software engineering field. It doesn't matter who they are or what they did (create a programming language or a framework, write books, etc...). Chances are very high that their first language was Basic. Most of the very smart people I have come across in this field started with Basic as well.
All these people did very well, didn't they?
The language you start with is unimportant. If you are passionate about programming and software engineering and you never stop wanting to learn new things, you'll do fine.
altiplanoSun 3 Apr 2011
Well I did some Basic too a while ago. It's was AMOS, a sprite-friendly sort of Basic on Amiga, around 1992 (or was it STOS on Atari ST ? Had one before). Did a little Sokoban-like game demo and a "check line of fire" routine. I may still have some of my code listings or algo notes of that time :)
DanielFathSun 3 Apr 2011
@cedric: It was just some self-deprecating humor, I don't think even Dijkstra meant it. It was supposed to incite people to embrace structured programming and get away from Basic.
altiplano Fri 1 Apr 2011
Hi folks,
I'm learning algorithmics and object-oriented concepts (personal interest, no job pressure) and I was planning to learn Ocaml and Ruby as first languages before hearing about Fantom (while looking for some Ocaml, Ruby and Scala comparisons).
I feel like (=I may be wrong there) Fantom's many features and limited documentation/tutorials make it an adventurous choice as a first programming language.
Fantom website says "Java and C# programmers will feel at home with Fantom's evolutionary syntax". Is this syntax familiarity helpful enough to justify studying Java first ? Which languages accessible to a beginner can be a good starter prior to Fantom learning ? Can a book covering several languages (like "Seven Languages in Seven Weeks") be a good preparation for a healthy Fantom encounter ?
Thanks in advance.
PS : I'm also actually on XHTML, CSS and Javascript planning to have some fun making Android apps and better understanding of TiddlyWiki.
ahhatem Fri 1 Apr 2011
Hi altiplano,
Welcome to Fantom...
Actually Fantom is a very nice language... I didn't really understand what to u do for living and whether it has any relation with software at all... any way I hope you have all the fun.
First,I DON'T recommend beginning with Ocaml, to be honest I don't know much about it, but my recommendation is to either begin with a mainstream language...like java, c# or ruby or something special like Fantom,... IMHO, Java is tedious and have some very annoying features but is mainstream that mean you could find a job with java... ruby has a terrible performance something like 30x java for example, but has a beautiful syntax and is fun to use but less jobs than java... In this field java is sort of a legacy but and extremely huge legacy that will stay an active market for dozens of years.
To me, Fantom is the best of java and ruby combined... the best of both syntaxes, the best ideas... besides the Fantom FFI (feature allows you to interop with java libs and classes) is very nice in using the java libs fortune and not being trapped in pure fantom libs.. And Fantom has a great performance, actually comparable to java and scala..
Fantom is a lot easier than scala and a lot less error prone... you may shoot yourself pretty easily in scala... Ocaml is a somehow a niche lang that usual people don't use, It is rarely used in commercial software... some system programming .. stuff like that.
If you are not learning for investment to find a job, learn Fantom it is really great, If I would have found it earlier I would have used it in many cases....
Good luck... and have fun!
altiplano Sat 2 Apr 2011
Hi Ahhatem,
I understand the criteria of job market value of the different languages but as my present interest in programming is not driven by professional matters this criteria has low priority for me.
So I was first looking for a language or two that could give me good habits and ways to conceive programming, while not being too harsh to learn, so avoiding being discouraged or disgusted in the process ;-(
Hence my question about Java before Fantom, as Java does not look quite... well... funky :-)
DanielFath Sat 2 Apr 2011
Hi altiplano. I'm glad you took interest in Fantom, as for it being a first language I'm divided a bit. On one side it's a great language that is to my liking on the other hand it might be too good for you, just don't take this the wrong way ;) Fantom takes care of many, many nuances while programming, which is great when you are experienced but may surprise you when you are a novice. So in my opinion, you need to start lower level. Don't take Java or C# or even Scala.
Your first language should be C. C is NOT a user friendly language. C is hard, C is low level, but C will help you realize how computer software really works. Once you get pointers and references and stacks you'll have a much cleaner picture how everything comes together to make language/code. After C I'd say either jump to Java or C# and then Fantom (maybe study a bit Lisp after C to get the whole functional programming).
Why I'm telling you this? If you simply start from Fantom you'll be annoyed by some things and maybe find it hard to jump to a lower level language (which are in demand). Once you start lower lever and go up, you'll still remember lower level while at the same time appreciating all the tiny things Fantom or Java does to make your life easier. Think of C as one of those needle mattresses and Fantom as a nice and soft one. Once you get you used to a bed of needles sleeping in a plain bed won't be hard, but not vice versa.
Oh yeah, I highly recommend steering clear of "Learn X languages in X days". To know a language you need at least five years. To skim it superficially you probably need a week or two. In one day you can't even learn a variety of Lisp.
PS. Why I haven't recommended assembler or machine language. They are waay to low level and they are usually highly platform specific (especially the machine language which is basically hexadecimal). They are more for those that want to know how hardware works than how software that relies on hardware works.
yachris Sat 2 Apr 2011
With all due respect to DanielFath, learning C as a first language is horrible advice.
It's a bit like telling someone to learn to drive in a Formula 1 car, at racing speeds, without seat belts.
In fact, C is (just like assembly) really too level a language for a first language. I agree (somewhat) that it's reasonable to learn at some point, but it can ingrain bad habits (like poor encapsulation) and incorrect views (like "C is the fastest language because pointers are direct access to memory!"). Plus, handling pointers, and pointers to pointers, etc. that early on is just asking for way too much confusion.
For a first language, you want something that AT LEAST gives you array bounds checking. That's something that can be really hard to find, and a primary mistake beginners make.
I think that Java is probably a pretty good choice, just because there are lots of good beginner, introductory books on Java (my wife liked the "Head First Java" book when she got back into programming). The compiler catches a lot of things, like usage of uninitialized variables, that are a lot of help to the beginner. Oh, and there's lots of good free tools (Eclipse, NetBeans, etc.) that make the beginner's life easier.
Fantom is fantastic, and maybe someday there will be good introductory material and tools to make it more of a reasonable first language. Keep it in mind for a second language, once you feel competent with Java. Java is NOT perfect, and Fantom addresses a lot of Java's shortcomings, but it's worth understanding that before coming to Fantom.
And enjoy programming... there are a lot of fun things on the web, particularly if you search for "programming puzzles".
DanielFath Sat 2 Apr 2011
To paraphrase Stevey: "Do uglies, do them fast".
If you want to be a professional I'd definitely recommend going C if not the first then amongst the first. C is an incredibly hard language. Once you grasp C no other language (in strucural paradigm at least) will be a problem. Starting your language experience with Java will leave you blind to certain aspects like the infamous Schlemiel the Painter.
If you start in Java, going back to C would be hard. Kinda like using IDEs and then having to rely on Notepad++. Chances are you are gonna drop Notepad++ and C because you are used to better more friendly enviroment.
BTW my first language was Basic so I'm probably scarred for life, beyond repair ;)
andy Sat 2 Apr 2011
That's where I started - MS Basic and DOS on an 8086 with 640k of RAM - ah the good old days :)
DanielFath Sat 2 Apr 2011
Actually I started with C64 basic :P And then jumped to pentium 2 (once C64 died).
Managed to make a racing game for Basic... And a little useless malware (he blocked computer when ran). Ah yes, life was good.
PS. Yeah I totally recommend Head First series, it's perfect way to dip your toes into language/platform.
helium Sat 2 Apr 2011
I'm against starting with C. If you want to learn programming (design, algorithms, data structures, ...) a high level language is more useful, if you want to know how a computer works assembler is the way to go. C sits somewhere in between. It hides some stuff like registers, but still let's you work with memory addresses, ... it makes a lot of stuff that could be simple a pain in the ass, but not as much as it is in assembler.
Learning C at some point isn't a bad idea, but I don't see the point in learning it as first language.
altiplano Sat 2 Apr 2011
I read the article linked by DanielFath (plus one about JavaSchools there too) and I see the virtue of the Karate Kid philosophy and the butterfly effect risk of being ignorant of some core principles discussed in it. I'm likely to start with an higher level language but I'll stay receptive to articles like that, it's useful to know one's limits.
Thanks folks. Now give me some months :)
cbeust Sun 3 Apr 2011
The idea that "Basic scars you forever" needs to die. It's just not true.
Take a look around at all the people you admire in the software engineering field. It doesn't matter who they are or what they did (create a programming language or a framework, write books, etc...). Chances are very high that their first language was Basic. Most of the very smart people I have come across in this field started with Basic as well.
All these people did very well, didn't they?
The language you start with is unimportant. If you are passionate about programming and software engineering and you never stop wanting to learn new things, you'll do fine.
altiplano Sun 3 Apr 2011
Well I did some Basic too a while ago. It's was AMOS, a sprite-friendly sort of Basic on Amiga, around 1992 (or was it STOS on Atari ST ? Had one before). Did a little Sokoban-like game demo and a "check line of fire" routine. I may still have some of my code listings or algo notes of that time :)
DanielFath Sun 3 Apr 2011
@cedric: It was just some self-deprecating humor, I don't think even Dijkstra meant it. It was supposed to incite people to embrace structured programming and get away from Basic.