Which programming language...?(iamgabeaudick.tumblr.com)
iamgabeaudick.tumblr.com
Which programming language...?
http://iamgabeaudick.tumblr.com/post/576987756/which-language
36 comments
Rabble. Not even funny.
The first language learning question is a though one. (1) Probably the best would be anything which goes out of your way to concentrate on the important concepts behind it. (2) It depends on the way you want to teach it.
The first language learning question is a though one. (1) Probably the best would be anything which goes out of your way to concentrate on the important concepts behind it. (2) It depends on the way you want to teach it.
These posts make me sad. If you are in a position to choose the language you're working in, choose the one that makes you and your team happy (in a gestalt sense, of course).
I don't mean to be overly reductionist. But the languages that I'm currently happiest with are statically-typed, compiled, and run on the JVM.
When I'm in a position to choose, I opt for the one in which myself and my coworkers are most productive that meets project requirements. There's not much to say beyond that.
I don't mean to be overly reductionist. But the languages that I'm currently happiest with are statically-typed, compiled, and run on the JVM.
When I'm in a position to choose, I opt for the one in which myself and my coworkers are most productive that meets project requirements. There's not much to say beyond that.
The article is about which language you should learn first.
And it's not a very serious article to begin with.
And it's not a very serious article to begin with.
For someone who is completely new to programming, "statically-typed, compiled, run on the JVM" means about as much as "made-of-whale-bones, faster-than-light, and eleven-pounds-to-the-dollar". Just a thought, as long as we're still talking about telling new programmers where to start.
> But the languages that I'm currently happiest with are statically-typed, compiled, and run on the JVM.
But you are sane. So many here...aren't...
But you are sane. So many here...aren't...
How is it insane to prefer Ruby or Clojure or even C++? You may happen to agree with his preference, but there's a difference between saying, "yes, I prefer those languages too!" and "everyone who prefers any other language is insane."
> To achieve a magical sense of childlike wonder that you have a hard time differentiating from megalomania: Objective C
I felt no childlike wonder while doing Objective C and this compared to Java. It's less verbose, but it's nothing that good about it. It did remind me of lisp but just barely([]).
Oh, an memory management wasn't something I was looking forward to...
I felt no childlike wonder while doing Objective C and this compared to Java. It's less verbose, but it's nothing that good about it. It did remind me of lisp but just barely([]).
Oh, an memory management wasn't something I was looking forward to...
less verbose, really? People are giving Java crap for having to do string1.equals(string2) instead of string1 == string2, but what about [string isEqualToString:string2]. Also concating strings in Objective-C makes my eyes bleed. I still like the dynamic aspects of the language (selectors etc.) though.
[string1 isEqual:string2]
works just fine. String concatenation is no harder than a format string. Writing a category on NSArray to add join is pretty dead simple as well.
works just fine. String concatenation is no harder than a format string. Writing a category on NSArray to add join is pretty dead simple as well.
You're talking about Cocoa, not Objective-C. It's best to separate them, since some people love Cocoa but hate Objective-C and vice versa.
You should see some of my generics code...
Of course in Objective-C I would use casting so, indeed, it might be more verbose overall.
Of course in Objective-C I would use casting so, indeed, it might be more verbose overall.
He is totally wrong, but I still get the point and found the post funny.
I don't; it's obviously written by Yet Another Bitter Python Hacker, and isn't even really that funny.
I think that the best First Programming Language to learn would still be C, followed by some flavor of Lisp. C, because it's both practical and teaches you how your computer works at a low level, and Lisp, because it shows you how powerful computers can be when you strip them down to the mathematical bone.
Everything else is just some balance between the two.
I think that the best First Programming Language to learn would still be C, followed by some flavor of Lisp. C, because it's both practical and teaches you how your computer works at a low level, and Lisp, because it shows you how powerful computers can be when you strip them down to the mathematical bone.
Everything else is just some balance between the two.
isn't even really that funny.
Yep, this one was better: http://james-iry.blogspot.com/2009/05/brief-incomplete-and-m...Not only better, but also factual. Even Neal Gafter agreed with it: http://twitter.com/gafter/status/1739264519
I 'learned' C first, never did anything useful. C is not beginner friendly simply because it provides no instant gratification. Python is instant gratification for newbies. You can make a GUI in five minutes. In C you have to READ A BOOK first. Console apps don't thrill young people. GUIs do.
My two cents, take it for what it's worth.
My two cents, take it for what it's worth.
Actually, this is the best push for Python i've ever seen. Its not a great production grade language, but I agree, getting people interested in programming is more important than getting them to grok the hard parts of programming (C/C++)
How do I make a GUI in 5 minutes using python. Can you please point me to a link / blog post. thanks.
google 'tkinter'
Here's an example I just made:
#-----begin------
from Tkinter import * #part of standard library
def reverse():
entrybox=Entry(root) #create an entry widget
entrybox.pack() #display it in the window
button1=Button(root, text='Press Me', command=reverse)
button1.pack()
entrybox.insert(0,'type here') #add a default value
root.mainloop()
Here's an example I just made:
#-----begin------
from Tkinter import * #part of standard library
def reverse():
s=entrybox.get() #get text from entry widget
entrybox.delete(0,END) #delete text from entry widget
entrybox.insert(0,s[::-1]) #reverse text, insert it
root=Tk() #create a windowentrybox=Entry(root) #create an entry widget
entrybox.pack() #display it in the window
button1=Button(root, text='Press Me', command=reverse)
button1.pack()
entrybox.insert(0,'type here') #add a default value
root.mainloop()
It is interesting that you don't recommend any languages with a proper type system. Do you believe types are not important?
I'm guessing you're referring to languages like Haskell here. I think the work people are doing on types in those languages is fascinating but it also seems like work in progress and I wouldn't recommend those languages to a beginner. The key concepts in the lisp-like languages (closures, higher-order functions, garbage collection etc) are easier to understand in a dynamic language IMO.
>The key concepts in the lisp-like languages (closures, higher-order functions, garbage collection etc) are easier to understand in a dynamic language IMO.
How so? F# and Scala, and Haskell aren't dynamically typed languages...
How so? F# and Scala, and Haskell aren't dynamically typed languages...
I'm gonna take a guess and say he has been programming for more than 2 years and realizes that types really don't matter.
Define 'proper' type system; C is a static, strongly typed language, with the important feature that the type system is simple enough for an inexperienced programmer to understand and be capable of implementing.
I'm pretty sure C is considered weak in it will automatically cast from one type to another.
C's "types" are just interchangeable methods of interpreting a pile of bits. That's not a strong type system, that's types on the honor system.
C's type system is restrictive enough to get annoying occasionally, but doesn't protect you from loads of things it could, since it is not strongly typed.
By "proper" do you mean mandatory? Otherwise, people are going to yell "CLOS" at you.
To learn how a practical computer works: MMIX
To understand the mathematical theory of computation: Turing Machine Tape
To follow the subject from its roots: Babbage Analytic Engine Heap
To truly grasp algorithms: Psuedocode
And which of the two editors -- EMACS or vi -- should I use? Paper and pencil.
To understand the mathematical theory of computation: Turing Machine Tape
To follow the subject from its roots: Babbage Analytic Engine Heap
To truly grasp algorithms: Psuedocode
And which of the two editors -- EMACS or vi -- should I use? Paper and pencil.
We can bitch about how language implementations never live up to our ideals every day of the week, but people trying to get good advice on where to start get caught in the crossfire.
Heck, I started with BASIC, followed by C++. Now that I've got those out of the way, I know I can tackle all kinds of bullshit.
Python still seems most reasonable as a first language, to me. Not my favorite, these days, but local maxima, you know? (Probably followed by C, then Prolog. Lua and Erlang are practical syntheses, and should be picked up easily afterward.)
Heck, I started with BASIC, followed by C++. Now that I've got those out of the way, I know I can tackle all kinds of bullshit.
Python still seems most reasonable as a first language, to me. Not my favorite, these days, but local maxima, you know? (Probably followed by C, then Prolog. Lua and Erlang are practical syntheses, and should be picked up easily afterward.)
Some languages get evaluated on their inherent qualities and some by the places you might encounter them. Not very insightful even for a flippant answer :-)
Though I probably would have added to Python AND Ruby:
"... and you also want to get a website up fast."
and to C#: "... you want Java but Microsoft-ified"
Before learning any language, first learn some DSLs, like ActionScript or Processing; they'll give you 100x the sense of "instant gratification" (really just a good feedback loop, to avoid learned helplessness) of general-purpose languages.
Then read a book on C; but don't bother trying to "learn" it yet. You won't get it, not at first. Then learn Javascript and PHP (and SQL), and use them until you get tired of Javascript's missing standard library and PHP's disorganized one. Quit using PHP; quit using Javascript for now. Read the C book again. Also read a book on Lisp.
Learn Python or Ruby now. Now read the C book one more time. This time you should understand it.
Now's a good time for a university education, if you'd like, or algorithms/data structures/discrete math books, if not. Become really good at creating normalized data structures and efficient indeces for them (to the point where you stop craving ORMs and NoSQL.) Learn to cache data.
Learn the sundry unix shell scripting languages (basically trying to live anything resembling a normal life on a non-GUI Linux set-up will force this on you, so that's a good proximal reccomendation.) Try to code some sort of compiler. Realize that, despite knowing however many of the algorithms involved, there still seems to be something magical about them. Learn an assembly language, and how the dynamic linker/loader, executable object format, and virtual memory subsystems of your OS work. Grok that compilers just do clever string processing, and write a simple one. Learn to cache instructions, and make your compiler do a few optimizations.
Keep learning other languages until the Lisp book makes sense. Then pick a language to work in, for you are now a Journeyman.
(If you'd like to like Javascript again at this point, learn Smalltalk or Lua, or look at how MOOs work. If you'd like to ever like C++, learn Haskell first and treat C++ as a compromise between it and assembler. Don't bother liking Java or C#, but learn some language on the JVM/CLR so as to like managed code in general.)