Radified Community Forums
http://radified.com/cgi-bin/yabb2/YaBB.pl
Rad Community Non-Technical Discussion Boards >> The Water Cooler >> Best Programming languages to learn to get a job
http://radified.com/cgi-bin/yabb2/YaBB.pl?num=1232324869

Message started by Rad on Jan 18th, 2009 at 6:27pm

Title: Best Programming languages to learn to get a job
Post by Rad on Jan 18th, 2009 at 6:27pm
What are the best programming languages to learn (assuming you know squat) in order to get a job? (most employable)

Or, if there is a heirachy, what would the learning-path look like?

How would this differ from languages that are FUN/COOL to learn?

Title: Re: Best Programming languages to learn to get a job
Post by Nigel Bree on Jan 19th, 2009 at 12:41am
Wait a sec, didn't you just get a job? That probably puts you closer to the market reality of what's being looked for than anyone else right now!


Rad wrote on Jan 18th, 2009 at 6:27pm:
Or, if there is a heirachy

There is, but remember that the field of software is now mighty big (so that the range of talents companies need covers a wide range of specific technologies and ranges of ability), and also subject to manias and fashion and supply constraints and all kinds of of things. Also, it has to be asked what length of gig are you wanting - the old "where do you see yourself in X years?" question.

And of course, it's worth bearing in mind that in terms of the employment-market aggregate, companies are in a feedback loop in that what most firms want are employees that are cheap and easily replaceable, and so many companies tend to only pursue technologies in which it is (perceived to be) easy to hire folks easily and cheaply at some point in time.

Indeed, the more "mainstream" technologies which tend to be the ones more companies seek are typically the very ones that are easiest to learn superficially, thanks to this feedback loop. Which is all very well, but doesn't always make for a lasting career or a personally satisfying one.


Rad wrote on Jan 18th, 2009 at 6:27pm:
How would this differ from languages that are FUN/COOL to learn?  

Well, if you find programming fun and cool, then you have an intrinsic motivation to learn that can over time move you far beyond the abilities of anyone who is just phoning it in every day for the money.

To get to the higher levels of ability you really have to learn lots of languages anyway, so in a sense it doesn't matter which one you pick; following the ones you enjoy makes it easier to get good at it, since if you're enjoying the process every step of the way you'll sustain the pace of learning for the years it takes to get to the higher levels of ability.

By the way, I can't remember if I've linked to these before but if you're feeling keen, you can always have a look through these to see if you're ready for Lisp yet. If you aren't it's no biggie, but eventually you will be and it will change the way you think.

Title: Re: Best Programming languages to learn to get a job
Post by Rad.Test on Jan 19th, 2009 at 10:43am

wrote on Jan 19th, 2009 at 12:41am:
Wait a sec, didn't you just get a job?

It's not a done deal. Only had an interview. But talking to them made me think. For example, they use .NET and not PHP.

I will peruse your links.

The problem I think is that there are so many options/avenues/paths/languages that I'm not sure which represents a wise decision.

What about LISP makes you single it out?

Speaking of cool stuff, have you ever looked into 'Certified Ethical Hacker' stuff? That seems like cool stuff.

Title: Re: Best Programming languages to learn to get a job
Post by MrMagoo on Jan 19th, 2009 at 1:21pm

Rad.Test wrote on Jan 19th, 2009 at 10:43am:
Speaking of cool stuff, have you ever looked into 'Certified Ethical Hacker' stuff? That seems like cool stuff.  

Ya, that's really cool stuff.  But really, I think any talented coder could figure out all the hacking stuff pretty quickly.  Most of 'computer security' is just making sure your services are configured correctly to only allow access to people who should have it.  Finding true 'Zero Day' security holes usually requires a throughal understanding of the code.  Either that, or a deep understanding of cryptography theory, which is better covered by advanced math than the 'White Hat Hacking' courses.  

So, its cool stuff (and really, really interesting) for someone on the adminstrator level or someone trying to get started in security, but I think you are just as well served learning about proper system administration and/or programing languages than reading things that focus on hacking.  Of course, hacking stuff (in an academic environment, of course) can be tons of fun, and fun things are easy to learn, so there's something to that.

Title: Re: Best Programming languages to learn to get a job
Post by Nigel Bree on Jan 19th, 2009 at 10:33pm

Rad.Test wrote on Jan 19th, 2009 at 10:43am:
But talking to them made me think. For example, they use .NET and not PHP.

Well, .NET isn't a language per se, it's better described as a platform - one which encompasses a lot of languages. Although C# does have a slightly "special" status in the .NET world, that's really only due to it being a well-designed language that Microsoft control the specification of, so they can evolve it at the pace and in the direction they want.

In fact, there's no reason that PHP source code won't translate and run in .NET just fine if someone bothers to write a compiler and create a small class library to provide emulation goo for some of PHP's particular idiosyncrasies. It's not even conceptually hard to do; the only reason such things are "hard" in practice is the sheer volume of grinding minuscule detail where some script depends on some particular implementation bug that has ended up being codified as "how the language works".

[ That's true of most language implementations, by the way. You can write a parser and an compiler for most languages of the order of complexity of, say, Javascript in no time at all. Being compatible with all the odd quirks of the run-time library will take more than ten times as long and be not much fun at all. ]


Rad.Test wrote on Jan 19th, 2009 at 10:43am:
What about LISP makes you single it out?

I've mentioned before that the lamba calculus is the mathematical soul of computing. Lisp was pretty much just a directly executable version of that, although over the years (remember, it's over 50 years old now) it grew into something of a behemoth; Lisp supported meta-programming, so could easily adapt to any new idea that came along, and did...

The particular variant of Lisp used by Harold Abelson and Gerald Sussman in those video lectures is a "pure" subset of the Lisp language called Scheme which cleaves more exactly to the Lambda calculus, and has been deliberately kept small (the language could be completely defined in about 30 pages), so that their great book and the course they taught could focus more on teaching the essence of programming, not merely a programming language.

This lovely series of blog articles from someone beginning to wrestle with this material is well worth looking at, by the way, to get a flavour of why it's different, and hard, and worth it.


Rad.Test wrote on Jan 19th, 2009 at 10:43am:
have you ever looked into 'Certified Ethical Hacker' stuff?

Meh, that's simple script kiddy stuff. But then, pretty much "certified" anything in the computing field is like that, just the most superficial elements thrown into a multiple-choice trivia test.

Now you could quite justifiably call that snobbery. But it's also true, and you'll find that it's pretty typical opinion of all these kinds of silly certifications. They exist only to impress HR people. Don't bother.

Title: Re: Best Programming languages to learn to get a job
Post by Pleonasm on Jan 20th, 2009 at 12:16pm

Quote:
…see if you're ready for Lisp yet. If you aren't it's no biggie, but eventually you will be and it will change the way you think.

This is not an exaggeration. If you have not yet been exposed to Lisp, you can’t really appreciate how different it is from most other programming languages - and, can’t fully appreciate how “it will change the way you think.”

Title: Re: Best Programming languages to learn to get a job
Post by Rad on Jan 21st, 2009 at 5:32am

wrote on Jan 19th, 2009 at 10:33pm:
This lovely series of blog articles from someone beginning to wrestle with this material is well worth looking at, by the way, to get a flavour of why it's different, and hard, and worth it.

yeah, been there a while. interesting reading .. even the stuff i don't understand .. takes programming to another level i did not know existed. altho i'm even more confused now about where would be the best place to start.

i was imediately interested after reading his byline .. 'learning by doing'.

even the beginning of this was helpful in understanding programming:

http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-9.html#%_chap_1

i am just starting to see the difference between programming and programming languages.

Title: Re: Best Programming languages to learn to get a job
Post by Rad on Jan 21st, 2009 at 12:59pm
It would seem WHAT you learn (regarding programming & programming languages), and the ORDER in which you learn them .. would have a significant effecxt on how you develop as a programmer, yes?

What are you thoughts along this line .. knowing what you know now .. as to best way to proceed?

I keep hearing that C is a "gateway" language .. which is why universities normally start there.

Then I saw a reference to this book:

http://www.amazon.com/Primer-Plus-5th-Stephen-Prata/dp/0672326965/

I keep hearing how cool Ruby/Rails is/are. What would be the wisdom of starting there?

I don't want to learn (start with) bad habits.

Title: Re: Best Programming languages to learn to get a job
Post by Rad.Test on Jan 21st, 2009 at 4:22pm

wrote on Jan 19th, 2009 at 12:41am:
By the way, I can't remember if I've linked to these before but if you're feeling keen, you can always have a look through these to see if you're ready for Lisp yet.

Would this be a valid starting/launching point?

Title: Re: Best Programming languages to learn to get a job
Post by Rad.Test on Jan 21st, 2009 at 4:46pm
Interesting read .. 'far beyond'

http://query.nytimes.com/gst/fullpage.html?res=9D00E1DC1F3DF932A25753C1A962958260


Quote:
The most contentious claim made by Dr. Ericsson is that practice alone, not natural talent, makes for a record-breaking performance. "Innate capacities have very little to do with becoming a champion," said his colleague, Dr. Charness. "What's key is motivation and temperament, not a skill specific to performance. It's unlikely you can get just any child to apply themselves this rigorously for so long."

Title: Re: Best Programming languages to learn to get a job
Post by Nigel Bree on Jan 21st, 2009 at 5:57pm

Rad wrote on Jan 21st, 2009 at 12:59pm:
It would seem WHAT you learn (regarding programming & programming languages), and the ORDER in which you learn them .. would have a significant effecxt on how you develop as a programmer, yes?

An influence on the path you take, absolutely. But it's only that, an influence, and the magnitude of that influence is really more down to individual factors.

For instance, whenever starting out, whether you're told it explicitly it not you'll develop your own idea of "how the computer works". And that mental model, being something you are just inferring from the tiny amount you've been told, will be at best very incomplete and at worst wildly inaccurate (although still useful at the time). As you learn more, you need to expand and correct that understanding as you get more information.

Well, some folks have a much harder time doing that than others. They cherish their beliefs over and above any kind of external reality that is later presented to them; the cognitive phenomenon called confirmation bias is something that we are all subject to to some extent, but in many folks this is true to a pathological extent such that they basically stop being able to learn. Time and the pace with which you adopt new ideas is also a factor here; how deep a rut our our mental wheels have cut by treading the same ground over and over.

In the more extreme cases, you have ideas which the only way to accommodate is by undergoing a paradigm shift; an idea so powerful that it casts everything you thought you knew and understood before into a new light. For many people, the material in a book like SICP is impossible because it does that. Others will welcome that transformation.

Personal story time: I began, as I believe I've mentioned, with the Apple ][ when I was 13: BASIC, 6502 assembly language, Pascal (and doing non-trivial things with those) and then when I was 14 I added FORTRAN 77 and FORTH and Z80 assembly language and learned floating-point math by studying the disassemblies of the Apple ][ ROMS and started to teach myself calculus (which lead to the Taylor or Maclaurin series expansions used in computer math) and ... essentially, I just had a thirst to learn everything there was to learn about computers.

I didn't read SICP and learn Scheme until a decade later (during which time I'd done a large amount of stuff; learned dozens more programming languages and many more processors and written development tools and complete operating systems and designed embedded systems and applications and ... well, a lot).

Learning the lambda calculus was certainly was a powerful revelation, but it wasn't hard to make. Indeed, it was more euphoric, a feeling of ... completion; that this was an understanding I had been looking for all along, that could tie all that past experience together into a unified whole. I'd always have reached that point. The specifics of what I did before in what order don't really matter that much, because none of it held me back.

Note that has never been a time I was satisfied with what I had already learned or done. There's always one more peak to conquer, and something new to try, and everything I've tried I'd done something new to me (and thus at the end, knowing more than at the start and thus I could have done it better than I ended up doing). I'm slowing down a little now, mind you :-), but I'm still aware of what I have yet undone.


Quote:
“Ah, but a man's reach should exceed his grasp, or what's a heaven for?"
-- Robert Browning

As long as you have and retain the ambition to learn more and do more, that's the thing. Solve today's problems - what they are or the means is less important than making the attempt, and in doing so stretch yourself and never be satisfied with what you've done thus far.

Title: Re: Best Programming languages to learn to get a job
Post by Nigel Bree on Jan 21st, 2009 at 6:22pm
For some reason, I keep running over the ~4k post length limit....


Rad.Test wrote on Jan 21st, 2009 at 4:22pm:
Would this be a valid starting/launching point?

Absolutely. As would just about anything else. The main thing is always to be pushing and challenging your understanding, and to be aware that your understanding is conditional on your past experience and limited by it, and thus constantly needs updating and adaptation.


Rad wrote on Jan 21st, 2009 at 12:59pm:
I don't want to learn (start with) bad habits.

Just start. If you are always pushing yourself, you won't stay still long enough to form too many!

And as for habits, there's a place for them. The familiar is what gives us confidence to take the next step into the unknown.

Analogy alert!

You don't scale a mountain without building yourself base camps; you won't reach the heights without leaving those base camps behind. That you intend to reach the top is more important than whether today you take the left fork or right fork (and if you have to double back, so be it; you'll make mistakes).

Title: Re: Best Programming languages to learn to get a job
Post by Rad on Jan 21st, 2009 at 11:50pm

wrote on Jan 21st, 2009 at 6:22pm:
For some reason, I keep running over the ~4k post length limit....

sorry. i upped it to 6k.

Title: Re: Best Programming languages to learn to get a job
Post by MrMagoo on Jan 22nd, 2009 at 2:42am
Nigel,

I wonder if you would be willing to share what you think of Ruby.  I learned some C and C++ several years ago and then didn't touch programing for a while.  About 3 years ago I began dabbling with Bash Shell, PHP, and Perl.  About 3 months ago it went from dabbling to honest studying, mostly focusing on Perl.  I choose Perl because I had some books laying around, some example code to work with, and some friends with experience to help me.  Perl was great for a few projects and sparked a renewed interest in programing, but I'm not having much fun with it on a current project (web application.)  It's not that it has been difficult to do what I want to do, it has just been incredibly tedious.  It seems to me that HTML was never meant to be a programing language (and its name seems to suggest that as well) and Perl wasn't really intended to produce HTML (even though it's been used for that for some time now.)

Even though I'm not very far into my study of perl, I'm tempted to jump into some other languages.  There is a PyGTK application I'd like to hack on, so I've considered Python.  I'd also love to learn Java so I can write applications for my Android phone.  

A college suggested Ruby for my web application.  Ruby fans claim that it is the best of everything - the best of SmallTalk, LISP, Perl, etc.  It looks like it would make developing web applications fast and less tedious (especially using the Rails framework.)  

Do you think Ruby is a good blend of other languages?  Would it really teach me as much about coding as they claim?  Or is it just part of the programing fashion you've mentioned a few times?

Do you think jumping to other languages (and gaining breath of understanding) is healthy before I have a good depth of knowledge of one language, or would it be better to hunker through more advanced Perl stuff before I change playgrounds?  

The challenge of programing is what I enjoy.  The tedium is what has always kept me away from it...

Title: Re: Best Programming languages to learn to get a job
Post by Rad on Jan 24th, 2009 at 4:35pm
I'm also interested in your thoughts on Ruby/Rails, since I feel drawn in that direction since it's web-oriented, and ever since I read (from a link you dropped) that it was akin to a "$10K dollar mountain bike..."  :)

I watched the first lecture on SICP here:

http://www.archive.org/details/mit_ocw_sicp

which got me pretty juiced. Especially when he said things like, "Unlike regular engineering, which deals with real things/mechanics, the only constraints we face in Programming are the limitations of the mind." (I got *real* juiced when I heard that.)

.. and also (in building larger programs), "There's not much difference between what I can build and what I can imagine." .. so that CS is like a form of abstract engineering.

Then read about problems here:

http://en.wikipedia.org/wiki/Structure_and_Interpretation_of_Computer_Programs

.. which landed me here:

http://www.htdp.org/

http://www.htdp.org/2003-09-26/Book/

via this 14-page PDF, which critiques SICP:

http://www.cs.brown.edu/~sk/Publications/Papers/Published/fffk-htdp-vs-sicp-journal/paper.pdf

Have you heard of HtDP? Your thoughts?

They use Scheme, which is a varient of LISP, I believe.

They also gravitate toward Java to teach OOP.

http://www.teach-scheme.org/

http://www.teach-scheme.org/Overview/

Regarding SICP, I also like that they present a general framework for thinking about languages:

1. What are the primitive elements?
2. What are the means of combination?
3. What are the means of abstraction? (to make complex things seem primitive .. to supress details .. to build bigger systems)

Title: Re: Best Programming languages to learn to get a job
Post by Nigel Bree on Jan 26th, 2009 at 5:28pm

Rad wrote on Jan 24th, 2009 at 4:35pm:
Have you heard of HtDP? Your thoughts?

I hadn't heard of that particular text, although Matthias Felleisen and Shriram Krishnamurthi are well-known educators who have done a lot of good work in the Scheme community.

The overall tone of the paper is balanced, but think it's also notable that they don't mention some important things about why SICP is the way it is, and why today's students really struggle so much with it. MIT's student intake is truly exceptional; many of the "problems" talked about with SICP in the paper are complete non-issues, or elevate some modern fashion (viz, explicit methodologies) beyond where they should be. The simple truth is that other schools are dealing with a wider range of student abilities, and as I've talked about before, the level of ability of incoming students to software courses has been falling very substantially worldwide for many years.

Alternative texts like this exist as a practical compromise to broaden the appeal of SICP-like instruction in more universities, by lowering the barrier to entry; the advanced material from SICP thus elided is covered by texts like Essentials of Programming Languages so that in the end educators stretch the same core material into a) more stages to fill out three-year undergraduate courses, and b) be split over those years into different streams of ability, so that elite students can still get a proper classical CS education which will allow them to continue on, while the bulk of the undergraduates get at least some exposure to classical concepts (which most currently do not) during their basic vocational training.


Quote:
They use Scheme, which is a varient of LISP, I believe.

The same variant used by SICP and indeed created for the SICP course.


Quote:
They also gravitate toward Java to teach OOP.

While it is a poor decision to use Java for anything, it's rational in the context of the bargain being struck; to make some of the classical material available to institutions which have otherwise abandoned CS education and are just doing low-end vocational training. Those lower-tier institutions - which were the ones teaching Pascal as a programming language back in the 80's - pretty much all switched from Pascal to Java back from '95 through to '97, since that's the way the wind was blowing.

Such course providers have a real problem, incidentally, which is that the industry has split again, with web development now playing a huge role - despite all the dumbing down of courses based on Java, even that is something students are telling course providers is simply "too hard". So really, there needs to be even more streaming of students into different courses.

Which is not a problem itself; it has throughout my life always been the case that there is a huge intellectual gulf separating most "working" programmers from those aware of the intellectual foundations of the field. The only problem being the notion that everyone engaged in writing software is engaged in only minor variations of something called "programming", when that's not the case (although the belief nonetheless persists for equally obvious reasons).

The divide in abilities is real, which feeds into the hiring problem and thus to universities as a feedback loop since recruiters can't really distinguish between the ability of candidates to find the high-ability ones, employers want staff that are readily interchangeable and easily hired, while universities have to supply industry with candidates from a pool whose median ability is changing, but who can't really make that streaming of courses and candidates too explicit.


Quote:
Regarding SICP, I also like that they present a general framework for thinking about languages:

Indeed, but that is because the authors are absolutely steeped in the tradition of the lambda calculus, and Scheme being essentially a vehicle for using it directly to write programs means that it is teaching the universal mathematical essence of computing. Other programming languages have abandoned that essence for the sake of convenience, and present a model of computing which is built around a small set of end tasks their user communities want to perform.

This is known as domain-specific languages; since Lisp (and Scheme) are such perfect vehicles for writing interpreters for other languages, their model of how programs are written is really built on the idea of bridging the gap between computer and problem by creating a tower of interpreters for languages that are ever closer to a particular problem domain.

[ Most of the things which would be held up as "general-purpose programming languages" really aren't general-purpose at all. C and C++ are particularly notable in this category. They are pretty terrible at everything except writing certain kinds of code where their semantic closeness to the way register machines work is useful for high performance, i.e. operating systems or run-time systems for other programming languages. ]

This is in contrast to the popular "modern" languages, none of which really aspire to being "universal". Instead, each of which was created close to some particular end problem space and was built to address only that (the cautionary exception being Java, where the designers did have the aspiration of it being able to be used for everything, but succeeded only in creating something never more than third-best at anything).

Title: Re: Best Programming languages to learn to get a job
Post by Nigel Bree on Jan 26th, 2009 at 6:10pm

Rad wrote on Jan 24th, 2009 at 4:35pm:
I'm also interested in your thoughts on Ruby/Rails

As I've pointed out before, Matz set out specifically to create a language which would be approachable to a certain developer community, explicitly built on the concepts of Lisp but subsetted massively and disguised to make it appealing to an audience which would if told of the relationship with Lisp would reject it out of hand.

So, intellectually, Ruby is not really much different from Scheme except that it a) abandoned more of the Lispness, and b) being intended as "practical" the size and nature of the run-time library and the existence of the the Rails web framework is all that matters to most of its users rather than the Lisp concepts at its core.

It's a similar process that went on with Javascript, incidentally. It too was begun by Brendan Eich as a Lisp, but it ended up having a simplified Algol-like syntax glued to Self's object model which itself was modelled on Smalltalk (Self's kind of dispatching is an independent reinvention of basically the same approach as that taken by the Lisp community in their adoption of object-oriented programming in the 1970's - several of the early Lisp libraries for this worked basically the same way as Self does, although the approach that was later standardized as CLOS was rather a complicated one) and in this subsetting and simplification becoming something much less.

As I've said before, pretty much all roads lead back to Lisp and Smalltalk. There simply haven't been more than one or two genuinely new ideas in programming introduced since 1970's, just repackaging of different subsets aimed at different problem domains with perhaps a dash of the other unique progenitors like FORTH (later hybridized with Lisp as Postscript, for instance), or SQL or regular expressions which are off on the side as the embodiment of algebras rather than general calculi.

Given that my background is such that I could write an implementation of pretty much any programming language from scratch, I'm really the wrong person to answer the question of the relative merits of using them, because the newer ones exist primarily to express concepts that are not new and to serve needs I either don't have or can satisfy without them.

Title: Re: Best Programming languages to learn to get a job
Post by Pleonasm on Jan 26th, 2009 at 6:11pm
On the subject of programming languages, let’s not forget APL (A Programming Langauge), created by Ken Iverson in 1962. Arguably, you can do more ‘work’ with one line of APL code than with any other language.

Title: Re: Best Programming languages to learn to get a job
Post by Nigel Bree on Jan 26th, 2009 at 6:36pm

Pleonasm wrote on Jan 26th, 2009 at 6:11pm:
let’s not forget APL

Honestly, I put that in the same general box as the others more concerned with algebras (APL's core approach being vector algebra) than general calculi, since it's only the vector nature of it which is substantially important (combined with particular approach to symbology from which it derives its compactness of expression). It's so inordinately clumsy at any task which isn't concerned much with vectors I'd really call it a domain-specific language for them.

Prolog is similar in that respect; it puts the unification algorithm rather than vector algebra at its heart, and like APL although it can be used to do more general stuff it's really pretty awful to work with anything for which unification isn't a "natural" fit.

Each was important historically, of course, because there are problems of these types around, just as today there are lots of web problems, but neither really offers a wider lesson for program construction beyond that.

Title: Re: Best Programming languages to learn to get a job
Post by Rad on Jan 26th, 2009 at 10:44pm

wrote on Jan 26th, 2009 at 5:28pm:
level of ability of incoming students to software courses has been falling very substantially worldwide for many years

Why is this?


wrote on Jan 26th, 2009 at 5:28pm:
Alternative texts like this exist as a practical compromise to broaden the appeal of SICP-like instruction in more universities, by lowering the barrier to entry

Are you saying this is a watered-down version of SICP?


wrote on Jan 26th, 2009 at 5:28pm:
educators stretch the same core material into  

which would suggest SICP is more compact, yes?


wrote on Jan 26th, 2009 at 5:28pm:
The same variant used by SICP and indeed created for the SICP course.

Scheme was created specifically for SICP?


wrote on Jan 26th, 2009 at 5:28pm:
the notion that everyone engaged in writing software is engaged in only minor variations of something called "programming", when that's not the case (although the belief nonetheless persists  

Yes, I had this idea .. knew no better.


wrote on Jan 26th, 2009 at 5:28pm:
exception being Java, where the designers did have the aspiration of it being able to be used for everything, but succeeded only in creating something never more than third-best at anything

interesting. I didn't know that.

Title: Re: Best Programming languages to learn to get a job
Post by Rad on Jan 26th, 2009 at 10:50pm

wrote on Jan 26th, 2009 at 6:10pm:
As I've said before, pretty much all roads lead back to Lisp and Smalltalk. There simply haven't been more than one or two genuinely new ideas in programming introduced since 1970's,

Are you saying that if someone learns LISP & Smalltalk they know a lot about most programming languages?


wrote on Jan 26th, 2009 at 6:10pm:
Given that my background is such that I could write an implementation of pretty much any programming language from scratch

Forgive my n00bness, but what is an "implementation"?

Title: Re: Best Programming languages to learn to get a job
Post by Nigel Bree on Jan 27th, 2009 at 2:18am

Rad wrote on Jan 26th, 2009 at 10:44pm:
Why is this?

I don't know; a chap I know with a Ph.D. in Computer Science Education doesn't know either. There are certainly a lot of plausible potential explanations, many of which may contribute to some extent. Bear in mind that this is not isolated to computing, but is affecting a great many engineering disciplines, and it is happening worldwide - it is more striking outside the U.S., but that is because many elite students from other countries study at US institutions (which tend to dominate the global league tables for postgraduate engineering) and so it's mainly apparent in the ratio of nationalities for, say, PhD's awarded by U.S. institutions (where the ratio of foreign-born engineers has been increasing for some time).


Rad wrote on Jan 26th, 2009 at 10:44pm:
Are you saying this is a watered-down version of SICP?

Not quite - it's totally different to SICP, as a matter of deliberate design, to teach different things to a different kind of student.

Those different design choices made by the authors are many; much is omitted outright, other things which SICP only touches on (largely via the exercises, letting readers discover rather than telling them outright) are addressed in extensive detail. That doesn't make it worse, since if it helps anyone not ready for SICP make progress that is a very, very good thing indeed; rather, that it isn't a substitute for SICP.


Rad wrote on Jan 26th, 2009 at 10:44pm:
which would suggest SICP is more compact, yes?

Yes, but it's more than that, more like ... the difference between showing and telling. SICP is content to guide; students are asked to perform tasks requiring astonishingly deep insights in the exercises, the confidence of the authors being that the problems cannot be solved without the student undergoing the "Aha!" moment and making those key insights for themselves. A text like HTDP aims to tell lots of simpler, more measurable things that no-one can miss, but in the process it avoids challenging students to reach those deeper understandings.

Again, it's not that one is necessarily worse; but they are very different in aims.


Rad wrote on Jan 26th, 2009 at 10:44pm:
Scheme was created specifically for SICP?

Actually, the folklore is that it was created to explore a thing called the Actor model, from a paper by a gentleman called Carl Hewitt which was a seminal step in the development of object-oriented programming. However, it's no accident that Scheme is not just a subset of the Lisp dialects of the day, but refounded the language on the classical Lambda Calculus (making it perfect for teaching), and it's no accident that Gerald Sussman was one of the designers and used it in the MIT course he taught.

You might notice that Carl Hewitt's Ph.D advisor at MIT was one Seymour Papert, collaborator with educational theorist Jean Piaget, and whose Logo programming language designed for teaching children is also a dialect of Lisp. Alan Kay also had as one of the motivating ideas for Smalltalk that it would be a vehicle for teaching children.


Rad wrote on Jan 26th, 2009 at 10:50pm:
Are you saying that if someone learns LISP & Smalltalk they know a lot about most programming languages?

In the abstract, it's certainly likely; both languages have certain key characteristics like introspection underpinning them and which mean the language is hard to master without coming to understand how the constructs in the language could be used to create itself. But that understanding isn't inevitable. Of course the only people who learn either nowadays are those specifically interested in those deeper ideas anyway.


Rad wrote on Jan 26th, 2009 at 10:50pm:
what is an "implementation"?

An implementation is the concrete realization of something which is an abstract idea. For a programming language, that abstract something is usually a specification of the behaviour of the language constructs; a program that takes in source code and arranges for it to execute according to the specification is an implementation of that specification.

Writing those programs - the compilers and interpreters for programming languages - involves making hundreds or thousands of tradeoffs, such as that between execution speed and memory consumption, or between execution speed and portability, or between execution speed and having debugging facilities, or many others. The sum of all these different tradeoffs an implementor can make in realizing the specification can add up to some big practical differences.

Title: Re: Best Programming languages to learn to get a job
Post by Nigel Bree on Jan 27th, 2009 at 4:20pm
By the way, in respect of your blog entry, PLT scheme really is excellent and having a top-notch development environment like that really was something that teaching via Scheme needed.

Working through HtDP is a good thing, for sure, and the SICP courseware will still be there for you if at any point you want to dip into it. As long as you find that HtDP connects with you, that's more important than anything else.

Incidentally, another one of the folks (Dorai Sitaram) who worked on PLT scheme came up with Teach Yourself Scheme in Fixnum Days; the first part is just a gentle introduction to the language itself, while chapters 14+ do some practical things. This one is just focusing on using Scheme, so it doesn't attempt to deal with the kinds of weighty concepts SICP or even HtDP does.

Any of these texts are suitable at getting you started; they just won't take you all the way to the point where you really understand that computer languages themselves are just programs too, so if you go the HtDP route I do recommend a text like Essentials of Programming Languages as a follow-up.

[ In actual fact, it was the first edition of EOPL that was my introduction to Scheme; I read SICP afterwards. EOPL (any edition) is certainly a fine text.  ]

Title: Re: Best Programming languages to learn to get a job
Post by Rad on Jan 27th, 2009 at 10:38pm

wrote on Jan 27th, 2009 at 2:18am:
a lot of plausible potential explanations, many of which may contribute to some extent. Bear in mind that this is not isolated to computing, but is affecting a great many engineering disciplines, and it is happening worldwide

Got me thinking. Trying to figure out why that may be. What are your intuitions?

If nothing else, that makes you skills even MORE valuable.


wrote on Jan 27th, 2009 at 2:18am:
Not quite - it's totally different to SICP, as a matter of deliberate design, to teach different things to a different kind of student.

But you would say "easier," no? *Lots* easier?


wrote on Jan 27th, 2009 at 2:18am:
anyone not ready for SICP  

Are there concepts in SICP that some programmers simply cannot grasp? I mean, I feel it's just a matter of time .. in that you can teach brain-surgery or rocket-science to someone of average intelligence .. but it will simply take that person LONGER to learn .. but they will still be able to learn .. given enuf time (and perseverance).


wrote on Jan 27th, 2009 at 2:18am:
A text like HTDP aims to tell lots of simpler, more measurable things that no-one can miss, but in the process it avoids challenging students to reach those deeper understandings.

I see. Good explanation. (Great, actually.) To be honest, I like someone to spell it out for me .. whenever possible. Eliminates ambiguity. Growing up on the East coast (near New York) taught me to value directness. [ "Rad, you stink," vs "Hmmm, what's that smell?" ] Tho now you have me curious about comparing the approaches used in the two courses.


wrote on Jan 27th, 2009 at 2:18am:
refounded the language on the classical Lambda Calculus (making it perfect for teaching),  

I know you have discussed L-C before, and I have even read the Wikipedia entry on L-C, but could you pls again explain WHY a language founded on the L-C is ideal for teaching???

Maybe its the term 'Calculus' that is throwing me?


wrote on Jan 27th, 2009 at 2:18am:
Piaget, and whose Logo programming language designed for teaching children is also a dialect of Lisp. Alan Kay also had as one of the motivating ideas for Smalltalk that it would be a vehicle for teaching children.

One of the reason I felt drawn toward HiDP over SICP, even tho my ego would prefer to tackle SICP (and it have the videos, too) .. is that I feel I might be able to teach the course to the Bug when he gets older, or even some local high school kids, after school, since Newport Beach has many wealthy families.

Just thoughts, tho .. but the teaching of children has been a recurring idea running thru my head lately, and I seem to have a knack for conveying complex ideas so folks can grasp them more easily.


wrote on Jan 27th, 2009 at 2:18am:
motivating ideas for Smalltalk  

Can you pls summarize the diffs between Lisp, Scheme and Smalltalk?


wrote on Jan 27th, 2009 at 2:18am:
hard to master without coming to understand how the constructs in the language could be used to create itself

Uh, I've been reading that term .. just today .. CONSTRUCT(s). What is a construct?

That part about "creating itself" sounds deliciously intriguing .. like an inverse paradox or something.

Before I forget, I want to thank you for your help. I greatly appreciate it. Your knowledge/posts are so rich, I read them multiple times.


Title: Re: Best Programming languages to learn to get a job
Post by Rad on Jan 27th, 2009 at 10:46pm

wrote on Jan 27th, 2009 at 2:18am:
Writing those programs - the compilers and interpreters for programming languages - involves making hundreds or thousands of tradeoffs, such as that between execution speed and memory consumption

How much of programming involves the effect of your code/prgm on CPU/memory? I never considered that aspect (for some reason).

Title: Re: Best Programming languages to learn to get a job
Post by Rad on Jan 27th, 2009 at 10:56pm

wrote on Jan 27th, 2009 at 4:20pm:
PLT scheme really is excellent and having a top-notch development environment like that really was something that teaching via Scheme needed

You are referring to DrScheme, I suppose. I find it interesting that the book/text is dated Feb 2001:

http://www.amazon.com/How-Design-Programs-Introduction-Programming/dp/0262062186

.. with the online manual/version dated Sept 2003:

http://www.htdp.org/

.. but the language (and environment which comes WITH the language) is dated/updated January 21, 2009. (v4.1.4)

http://www.plt-scheme.org/

A date of Feb 2001 does not make the text obsolete?

Title: Re: Best Programming languages to learn to get a job
Post by Rad on Jan 27th, 2009 at 11:03pm

wrote on Jan 27th, 2009 at 4:20pm:
As long as you find that HtDP connects with you

This stuff connects with me. The problem is that I want to learn it all yesterday.

Do you recall that scene in the Matrix where a chopper is on the roof, and Neo asks Trinity, "Do you know how to fly that thing?" And she responds, "Not yet." .. then says, "Tank, I need a program for a model XXX chopper.."

.. Her eyes flitter for sec. Then she says, "Let's go." .. and she knows how to fly the thing.

I get frustrated when I can't absorb it fast enuf. Plus all this legal BS I've been having to deal with just sucks and wastes my time months at a time.

This is why I envy guys like you & Pleo who ALREADY know all this cool stuff.

Ars longa, vita brevis. The lyf so short, the craft so long to lerne.

http://en.wikipedia.org/wiki/Ars_longa,_vita_brevis

Title: Re: Best Programming languages to learn to get a job
Post by Rad on Jan 27th, 2009 at 11:08pm

wrote on Jan 27th, 2009 at 4:20pm:
so if you go the HtDP route I do recommend a text like Essentials of Programming Languages as a follow-up.

I am familiar with EOPL cuz there is a link to that website/info in the HELP menu of DrScheme, which I've been familiarizing myself with .. so I know it's beyond me right now.

Title: Re: Best Programming languages to learn to get a job
Post by Nigel Bree on Jan 28th, 2009 at 5:47am

Rad wrote on Jan 27th, 2009 at 10:38pm:
If nothing else, that makes you skills even MORE valuable.

Ah, but compared to what? The commentary about most businesses only seeking engineering staff who have readily interchangeable skill sets is no joke. Individuals with especially high ability are in fact considered a bad thing in many places; we cost more, we cannot be replaced, and we are hard to manage (being independent thinkers, we don't just STFU and do what we are told). There's even a project management concept which revolves around avoiding concentrated expertise.

Mastery is still worth pursuing, of course (as in any field!) but let's just say that with software in particular it is not an unalloyed good.


Rad wrote on Jan 27th, 2009 at 10:38pm:
But you would say "easier," no? *Lots* easier?

It's not a question of easy or hard so much as ... having the spark. The most profound parts of SICP have an activation energy which if you are missing doesn't just make them difficult, but almost impossible. But if you can reach the threshold, you unlock a level of understanding that makes all kinds of things easy. That's why it's a "when you are ready for it" text.


Rad wrote on Jan 27th, 2009 at 10:38pm:
Are there concepts in SICP that some programmers simply cannot grasp?

Cannot? It's a hard call. The vast majority of developers simply never make, and cannot be convinced to make, the attempt; they reject out of hand the idea that anything can exist which would be so different to their basic workaday understanding. They believe they are above average and the notion of further levels of understanding is one they will not believe in.


Rad wrote on Jan 27th, 2009 at 10:38pm:
could you pls again explain WHY a language founded on the L-C is ideal for teaching?

I'll try, but actually this is one of those things that you'll just "get" one day. Ya know it in your bones or ya don't.

But the executive summary is that the notation devised by logicians in the early 20th century turns out to be able to represent everything that computers can possibly do. There are other systems which can do this - Turing Machines, SK combinators - but those other systems have have several weaknesses; they are very very different from what our computers do, and they require colossal amounts of space (tape for Turing machines, program size for SK combinators, and so forth).

The notation used for Scheme is, in contrast, practical; programs require only modest space for the program itself and data space to run it, and making the physical computing devices we can build (from the first mainframes to modern CPUs) actually just run lambda calculus was easy enough that a Lisp (i.e., lambda calculus) interpreter turned out to be practical in assembly language on the machines of 1960.

And furthermore, it turns out via denotational semantics that the lambda calculus is a great vehicle for modelling not just programs, but the behaviour of programming languages themselves. Aside from the mathematical tricks that formal semantics brings, the fact you can represent the behaviour of any programming language in the lambda calculus means that model (which you create so you can prove theorems about it) can also be a program you can run!

This process could be seen recently in the work on the next revision of Javascript; as changes to the language were proposed, they were integrated into a formal semantic model (in a notation called ML) which could be both analysed as a theorem but also just run - the reference implementation of ES4 (the proposed next Javascript) was generated this way.

And this relates to the tradition I mentioned above, of computers languages as programs themselves. One of the key properties of the "universal" notations like the lambda calculus is that they can embed themselves. An interpreter for the lambda calculus can easily be written in the lambda calculus; and so it's a notation in which it is possible to write an interpreter - the program to implement - any other programming language.

Title: Re: Best Programming languages to learn to get a job
Post by Nigel Bree on Jan 28th, 2009 at 6:34am

Rad wrote on Jan 27th, 2009 at 10:38pm:
Uh, I've been reading that term .. just today .. CONSTRUCT(s). What is a construct?

It's a sort-of pun on the noun form of the English word we normally use as a verb: sense 4 in this reference. A construct (noun) is a constructed thing; programming language constructs (noun) are synthetic (i.e., constructed) ideas, built out of grammar and syntax and semantics. The self-referential joke is that those constructs (noun) exists in order to be put together in different ways to construct (verb) bigger things, i.e. programs.


Rad wrote on Jan 27th, 2009 at 10:38pm:
Can you pls summarize the diffs between Lisp, Scheme and Smalltalk?

Actually, I'd kinda like to skip that for now. The Lisp-vs-Scheme thing isn't that important, whereas a potted summary of how Smalltalk and Lisp relate wouldn't do Smalltalk justice (and wouldn't mean all that much to you if you don't yet know Lisp).


Rad wrote on Jan 27th, 2009 at 10:46pm:
How much of programming involves the effect of your code/prgm on CPU/memory?

Lots. That's the entire point of the many textbooks like this or this or of course this are all about analysing their relative efficiency in terms of time (measured in some abstract way) and memory space.

Aside from that, some particular languages (C and C++) avoid taking any responsibility for memory management themselves, pushing it onto the program author (on the somewhat dubious basis that the program author can potentially figure out how to do this better than any computer can) with the result that just keeping track of what memory is in use can in fact dominate the amount of code written (yup, you read that right; it's not uncommon for programs in C or C++ to have more lines of code devoted to wrangling memory than to actually solving the end problem).


Rad wrote on Jan 27th, 2009 at 10:56pm:
You are referring to DrScheme, I suppose.

Yup. PLT Scheme is the umbrella for the project that DrScheme is part of.


Rad wrote on Jan 27th, 2009 at 10:56pm:
A date of Feb 2001 does not make the text obsolete?  

Nope. The concepts in it are basically timeless.

Some of the HtDP author's views on development methodology are less timeless, since some of the development practices they talk about are really just matters of fashion, but they are practices which have not yet fallen out of fashion (although hopefully more people nowadays are aware of their limitations than in years past) and really for methodologies they don't become obsolete as much as they get overshadowed by the next Silver Bullet that gets seized upon and promoted by folks who never learned the lessons of the Mythical Man-Month.

Title: Re: Best Programming languages to learn to get a job
Post by Nigel Bree on Jan 28th, 2009 at 8:29pm

Rad wrote on Jan 27th, 2009 at 10:38pm:
What are your intuitions?

I gather that survey data indicates that potential candidates generally regard engineering disciplines as offering woefully insufficient compensation for the difficulty of the career path, but why such a perception would exist I wouldn't know (nor what time horizon such candidates are working to).


Rad wrote on Jan 27th, 2009 at 10:38pm:
I feel I might be able to teach the course to the Bug when he gets older, or even some local high school kids, after school, since Newport Beach has many wealthy families.

A noble aim, to be sure. The only reservation would be keeping things at a more "play" level via, perhaps, building stuff with some of the modern introduction kits like the basic stamp for as long as possible. I gather that obsessive study at young ages probably isn't an optimal thing overall for one's development as a well-rounded human being - not that my youth was unpleasant nor ended up going awry, but evidently there's a happy medium to be struck (although I wouldn't have a clue what it is, and don't have to figure it out).

Title: Re: Best Programming languages to learn to get a job
Post by Rad on Feb 1st, 2009 at 1:23pm

wrote on Jan 28th, 2009 at 5:47am:
notation devised by logicians in the early 20th century turns out to be able to represent everything that computers can possibly do

BY the term notation, you mean 'programminglanguage(s)?

the notation devised for programming in general, or the notional devised specifically for (as applied to) the L-C?

Seems presumptuous to say (not for *you*, but in general I mean) that we have devised a notation that can do *everything* a computer can possibly do .. no matter HOW powerful .. as if seemingly disregarding all future advances .. no? Already we have reached the final frontier .. in terms of programming notation? A new language combined with a new computer could not do more?


wrote on Jan 28th, 2009 at 5:47am:
integrated into a formal semantic model (in a notation called ML)

Are you using the terms 'notation' and 'programming language' interchangably? (since ML is a programming language, right?)


wrote on Jan 28th, 2009 at 5:47am:
the fact you can represent the behaviour of any programming language in the lambda calculus means that model (which you create so you can prove theorems about it) can also be a program you can run!

Okay, I had to read that over & over (& over & over), but I think I'm starting to catch on (see the light on implications) .. tho I don't yet know enough about programming to see into it very far. Sometimes I have to sleep on these things before I can see into it more clearly.



wrote on Jan 28th, 2009 at 5:47am:
This process could be seen recently in the work on the next revision of Javascript; as changes to the language were proposed

I skimmed the PDF. Does it say the next release/version of ML will more ML-like? If so, WHEN might this occur? ML is one of those languages I hear mentioned when reading about Lisp & Scheme.


wrote on Jan 28th, 2009 at 5:47am:
Lisp (i.e., lambda calculus) interpreter  

You use these terms interchangably here. Is one based on the other?


wrote on Jan 28th, 2009 at 5:47am:
so it's a notation in which it is possible to write an interpreter - the program to implement - any other programming language.

Are you saying the L-C is sort of a universal Rosetta stone of programming languages?

Thanks for the effort. I will revisit as my knowledge of programming increases.

Title: Re: Best Programming languages to learn to get a job
Post by Rad on Feb 1st, 2009 at 1:32pm

wrote on Jan 28th, 2009 at 6:34am:
those constructs (noun) exists in order to be put together in different ways to construct (verb) bigger things, i.e. programs.

Constructs are like sub-programs that help you build programs? I was thinking they were actually  mini-programs them-selves .. sort of designed to perform a single specific task, or tasks related to a particular topic.


wrote on Jan 28th, 2009 at 6:34am:
just keeping track of what memory is in use can in fact dominate the amount of code written  

Interesting. Sounds like C programmers must become experts in memory management.

Title: Re: Best Programming languages to learn to get a job
Post by Nigel Bree on Feb 1st, 2009 at 5:23pm

Rad wrote on Feb 1st, 2009 at 1:23pm:
BY the term notation, you mean 'programminglanguage(s)?

I meant the way the lambda calculus was written; it's a mathematical notation, and so the original form of it was a pretty dense mass of Greek letters. After all, this was before computers and it needed a consise written form just like other elements of mathematics.


Rad wrote on Feb 1st, 2009 at 1:23pm:
Are you using the terms 'notation' and 'programming language' interchangably? (since ML is a programming language, right?)

Actually, like the Lambda Calculus, ML was originally for mathematical proof. Like Scheme, ML-the-programming-language is something that grew out of that.

Programming languages certainly are a kind of formal notation, so it's correct to call them that, although it's more common to use that for classic written mathematical equations - after all we have the word "programs" to apply to programs!


Rad wrote on Feb 1st, 2009 at 1:23pm:
Seems presumptuous to say [...] that we have devised a notation that can do *everything* a computer can possibly do

Not at all; we're talking here about the essence of mathematics itself, which the lambda calculus was created to explore in the first place. Now there are some tricky technical details in there, which you may want to look at somewhat later on.

By the way, things that computers can do in principle is not the same thing as things we currently know how to get them to do in practice (which is more limited). With respect to time and space, there are a whole class of problems which are very hard to solve in practice indeed. If a proof can be constructed which can demonstrate that P=NP then it will set the world on its ear.


Rad wrote on Feb 1st, 2009 at 1:23pm:
You use these terms interchangably here. Is one based on the other?

Yes. Lisp (first proposed ~1958) was basically just a computer version of the lambda calculus (~1936), although actually the first Lisp interpreter in practice didn't match it as closely as it was intended. Lisp is really nowadays best thought of as a name for the entire family of computer languages which are based on the lambda calculus; the details of the differences between them are not that important, you should concentrate just on Scheme.



Title: Re: Best Programming languages to learn to get a job
Post by Nigel Bree on Feb 1st, 2009 at 5:48pm

Rad wrote on Feb 1st, 2009 at 1:32pm:
Sounds like C programmers must become experts in memory management.

Actually, it's worse than that. Almost all developers who write code in C/C++ completely and utterly fail to understand memory management at all, which is why they do such a lousy job of it in practice. Doing this manually is a problem that can end up scaling with nearly exponential complexity, so any program of significant size typically ends up instead using techniques that are *less* efficient to avoid this explosion of complexity.

The end result is that for anything non-trivial, it's best to let the computer just figure it out for itself, which is why most programming languages hide the process of reclaiming unused memory as something that no-one should think about. And they are right to do so.

[ Writing a "garbage collector" program itself is quite a challenge, mind you. It's one of the major bootstrapping problems in making a computer language host itself. ]

Title: Re: Best Programming languages to learn to get a job
Post by Rad on Feb 3rd, 2009 at 9:30pm
Thanks, Nigel. I will  return to this in a few days .. feeling v. bad right now .. cruddy. Haven't felt this lousy in a long time. Makes it hard to focus.

One question that's been bouncing around my brain is a characterization of the skill-set of somebody who works thru the HtDP course. I know you haven't read it, but maybe you could get some idea by looking over the TOC:

http://www.htdp.org/2003-09-26/Book/curriculum-Z-H-1.html#node_toc_start

.. compared to your average-Joe programmer.

I ask cuz I noticed a big jump in my skill-set after reading XHTML/CSS books after I had mucked around ad-hoc for years.

Title: Re: Best Programming languages to learn to get a job
Post by Nigel Bree on Feb 4th, 2009 at 4:09pm

Rad wrote on Feb 3rd, 2009 at 9:30pm:
a characterization of the skill-set of somebody who works thru the HtDP course

I couldn't say for a couple reasons.

Reading a book is about three main things; the text itself, the unwritten subtext, and the context brought to it by the reader. The result of that interaction can be all over the map - how deep a subtext is present for instance, and how well the reader perceives it and how it interacts with their context.

With SICP, the subtext of the book is exceptionally rich. Small, apparently throw-away comments made in the text can be alluding to astonishingly deep insights about software and the process of creating it. The people who, like me, rate it as perhaps the best book on software development ever written are people who interacted deeply with that subtext (helped by coming to it with a context which make us receptive to its lessons). Others can find the text itself too frustrating to get there, or don't yet have the context to be able to appreciate the subtext.

Really doing HtDP's potential as a book justice would need a deep reading to dig down into that; taking the time to do the exercises, and really trying to engage fully with it and everything it has to offer. And of course, that's just its potential, which some readers will realise and some won't.

The more general point, is that the reason I recommend this kind of material in the first place is not - or at least shouldn't be - really about skills, in the sense that one might list "I did X for Y time" experience on a resume, but rather the understanding and insight which will underpin continuous growth in capabilities throughout a career.

Title: Re: Best Programming languages to learn to get a job
Post by Rad on Feb 14th, 2009 at 3:26pm

wrote on Feb 4th, 2009 at 4:09pm:
how well the reader perceives it and how it interacts with their context

SICP is an introductory programming course, yes? Which would infer students/learners taking the course would have as their 'context' little-to-no context. Any 'context' would be from self-study, high-school programming courses (not very popular, I believe) and/or math as it applies to programming .. yes? no?


wrote on Feb 4th, 2009 at 4:09pm:
The people who, like me, rate it as perhaps the best book on software development ever written

This was an eyebrow-raising statement .. especially coming from someone with your background. Do I understandly correctly by inferring the subtext of what you have said here that you feel SICP is best set aside until someone has a requisite amount/level of experience? (re the 'context' statement made earlier).


wrote on Feb 4th, 2009 at 4:09pm:
doing HtDP's potential as a book justice would need a deep reading  

I appreciate your honesty. I think sometimes I feel you know all-things programming .. simply by waiving your hand across a particular text.

I noticed today on this page: http://filehippo.com/download_python/ .. where it said:


Quote:
can be learned in a few days

.. couldn't help but compare that to the HtDP course which supposedly takes a typical college student an entire semester.

Title: Re: Best Programming languages to learn to get a job
Post by Rad on Feb 14th, 2009 at 3:33pm

wrote on Feb 4th, 2009 at 4:09pm:
but rather the understanding and insight which will underpin continuous growth in capabilities throughout a career.

I've read other comments from ppl who've worked thru SICP and made similar comments .. that, even tho they've been programming professionally for years gleaned new insights while reading SICP that allowed them to approach things they previously founded daunting with a new-found ease.

.. which is one of the reasons I am attracted to texts like these. Insight is a beautiful thing, and texts that can catalyze it are valuable .. which I why I like to research books on a topic before spending time reading them.

Title: Re: Best Programming languages to learn to get a job
Post by Rad on Feb 14th, 2009 at 3:39pm

wrote on Feb 1st, 2009 at 5:23pm:
Yes. Lisp (first proposed ~1958) was basically just a computer version of the lambda calculus (~1936), although actually the first Lisp interpreter in practice didn't match it as closely as it was intended. Lisp is really nowadays best thought of as a name for the entire family of computer languages which are based on the lambda calculus; the details of the differences between them are not that important, you should concentrate just on Scheme.

This answered a lot a questions .. many I didn't even know I had. The light went on.

Title: Re: Best Programming languages to learn to get a job
Post by MrMagoo on Feb 14th, 2009 at 6:44pm

Rad wrote on Feb 14th, 2009 at 3:26pm:
SICP is an introductory programming course, yes?

In the MIT course videos that you referenced on your blog, the instructor seems to infer that the students in the class have some experience with other languages.  Fortran is mentioned a few times as a language that it is assumed the students have experience with.  So, I don't think that was the first class in the CS corriculum.  I'm most of the way through video 2b, and the focus seems to be on managing complexity and higher order procedures rather than an introduction to new CS students.

The videos show their age with the mention of Fortran.  I don't know anyone who works with that now days.  My mom said she learned it in college and hasn't touched it since, and she manages a small team of programmers using a wide variety of languages (cobal, java, perl...) so I get the impression it has fallen out of favor.  Most of the modern languages I've worked with like C, Perl, and Ruby are all capable of doing the things that the instructor mentions Fortran cannot (such as making combinations of combinations and treating functions like 'first class citizens.')  Although, admitedly, some of them don't do it as seemlessly as LISP seems to.  

In Perl, for example, you cannot make a list of lists, but you can emulate it by making a list of the addresses of other lists.  Same with functions - you can't assign a function to a variable and pass it as a parameter, but you can assign a reference (like an address) to a function to a variable, then pass that variable, achieving much the same effect.


Rad wrote on Feb 14th, 2009 at 3:26pm:
Python ...can be learned in a few days... but compare that to the HtDP course which supposedly takes a typical college student an entire semester

I've been looking at Python a little bit, too.  I think that what they mean is that if you are already familiar with Basic or Perl or something or have a programing foundation, then it would only take a few days to learn the syntax of Python.  I bought Programing Python and have been working through that.  (http://www.amazon.com/Python-Programming-Introduction-Computer-Science/dp/1887902996)  It is written as a first semester CS text-book, and the author mentions in the forward that when he teaches from it himself, he doesn't make it all the way through his own book in one semester.  

HtDP is probably along the same lines - the syntax of any language probably only takes a few days worth of time.  It is the concepts of how to design programs that consumes the rest of the time.

(By the way, I'm on the fence about if I'd recommend Programming Python.  It assumes zero experience with programing/scripting/computers and so moves slow for me, but I never did get a proper introduction to CS and still feel like it will be good for me to make sure I've got that foundation.)


Rad wrote on Feb 14th, 2009 at 3:26pm:
Do I understandly correctly by inferring the subtext of what you have said here that you feel SICP is best set aside until someone has a requisite amount/level of experience?

I am very interested in Nigel's answer here, but can also provide my own insight.  I have limited programming experience - I've dabble with it off and on since 5th grade but never taken it seriously.  I'm 2 full lessons into the MIT videos (through video 2b.)  So far, I'm keeping up.  It has not been difficult to understand the lessons.  In fact, there have been times I felt they belabored their point a bit.  So, I think that you could likely understand what is going on.  Now, that doesn't mean you will get the full insight.  That is where I'm interested in Nigel's opinion.

Personally, I think a 'both' approach is best for me.  I'm going to work through the course now and take what I can from it.  In a few years, when I have a more solid foundation, I'll review it again and see what new things I pick up.  I know my physics professor said he had to take Electricity and Magnetism about 3 times over 10 years to *really* know it.  Each time took him to a new level of understanding.  

Title: Re: Best Programming languages to learn to get a job
Post by Rad on Feb 14th, 2009 at 6:52pm
Just figured out my first 'program'.


Code:
(define (Fah->Cel f)
 (* 5 (/ (- f 32) 9)))

Was actually harder than I thought. Getting that 9 on the other side after (- f 32) kicked my butt.

Can't really think linearly (Fah minus 32 times 5 divided by 9 = Cel). Have to think .. Scheme-ishly?

Of course it's very easy (obvious) once  you see through it. The 'Duh' factor. =)

Title: Re: Best Programming languages to learn to get a job
Post by Rad on Feb 14th, 2009 at 6:59pm

MrMagoo wrote on Feb 14th, 2009 at 6:44pm:
I'm most of the way through video 2b

You are kickin' butt. I'm naturally interested to hear your thoughts as you work thru .. especially if you get flashes of intuition ('ah-ha' insights). I mean, you have to sit up and take notice when so many people claim it is the best-ever (introductory?) course on programming. Makes me want to hardware the course into my brain.

Title: Re: Best Programming languages to learn to get a job
Post by Rad on Feb 14th, 2009 at 7:03pm

MrMagoo wrote on Feb 14th, 2009 at 6:44pm:
The videos show their age with the mention of Fortran.  

They mention it, but don't USE it, right? I think Fortran was a teaching language prior to Pascal, which is what I had (for the second half of CS-1A, after we learned what memory and hard drives and CPUs did).

Title: Re: Best Programming languages to learn to get a job
Post by Rad on Feb 14th, 2009 at 7:08pm

MrMagoo wrote on Feb 14th, 2009 at 6:44pm:
I know my physics professor said he had to take Electricity and Magnetism about 3 times over 10 years to *really* know it.Each time took him to a new level of understanding.

This is a concept I was discussing recently with a friend .. how the first time thru we establish 'buckets' ( a filing-system of sorts) into which we deposit new info. Each subsequent pass allows us to refine our filing system and deposit more info into each bucket.

Which is why it's easier to learn a new language if you're already know one .. cuz then you already have your buckets (filing system) established from the first language.

It's easier to re-labeled buckets than create an entirely new filing system (for new info). And the better you know a language, the easier it is to learn a new one .. cuz you have a more elaborate and well-defined filing system for your new language's info.

Title: Re: Best Programming languages to learn to get a job
Post by Rad on Feb 14th, 2009 at 7:36pm

MrMagoo wrote on Feb 14th, 2009 at 6:44pm:
Personally, I think a 'both' approach is best for me.  

I also like to have a few (learning) irons in the fire .. keeps me on my toes. The switching from one to another (like reading two or three different books at the same time) shocks the brain enough that it doesn't let me get complacent. But that's just me. Someone else may feel differently.

Title: Re: Best Programming languages to learn to get a job
Post by MrMagoo on Feb 14th, 2009 at 9:30pm

Rad wrote on Feb 14th, 2009 at 7:03pm:
They mention it, but don't USE it, right?

No, no.  They use LISP.  They use Fortran as an example of a language missing much of the deeper power of LISP.


Rad wrote on Feb 14th, 2009 at 7:08pm:
...the first time thru we establish 'buckets' ( a filing-system of sorts) into which we deposit new info. Each subsequent pass allows us to refine our filing system and deposit more info into each bucket.

I think your 'buckets and filing system' might be a good illustration of the 'context' Nigel was talking about students bringing to the material.  

Title: Re: Best Programming languages to learn to get a job
Post by MrMagoo on Feb 14th, 2009 at 9:35pm

Rad wrote on Feb 14th, 2009 at 7:36pm:
The switching from one to another (like reading two or three different books at the same time) shocks the brain enough that it doesn't let me get complacent.

Ya, I've sort of felt the same way.  I've been learning Python from a text aimed at beginners, Ruby from a web site aimed at an intermediate programmer, and LISP aimed at MIT CS students at the same time the last few weeks.  

I kinda feel like organizing information about 3 different languages studied from 3 different perspectives has forced me to relate all the information together and learn the computer science underneath rather than just get comfortable with one way of thinking.  I've absorbed and internalized much more of the information than I thought I could at this bandwidth.

Title: Re: Best Programming languages to learn to get a job
Post by Rad on Feb 14th, 2009 at 10:02pm

MrMagoo wrote on Feb 14th, 2009 at 9:35pm:
than I thought I could at this bandwidth

Interesting use of the term bandwidth. I like it. You won't mind if I plagiarize, I hope. =)


MrMagoo wrote on Feb 14th, 2009 at 9:35pm:
from 3 different perspectives  

I've read somewhere that geniuses have the quality of being able to focus on one thing at a time.

Then again, I like the metaphor of looking at a mountain (Mt. Everest, for example) .. from mutiple perspectives .. from the Southern side, .. from the Northern slopes, etc.

ALL views are of the SAME mountain, yet yield vastly different perspectives (of the same mountain) .. which in turn yields a fuller, more accurate, comprehensive view/perspective.

Your mountain right now is Programming. How do you chose WHICH course you will study at any given time ?? What *feels* right?

Title: Re: Best Programming languages to learn to get a job
Post by MrMagoo on Feb 18th, 2009 at 6:53pm
Off-Topic replies have been moved to this Topic.

Title: Re: Best Programming languages to learn to get a job
Post by MrMagoo on Feb 14th, 2009 at 11:20pm

Rad wrote on Feb 14th, 2009 at 10:02pm:
You won't mind if I plagiarize, I hope. =)

Not at all.  I take it as a complement.


Rad wrote on Feb 14th, 2009 at 10:02pm:
I've read somewhere that geniuses have the quality of being able to focus on one thing at a time.

I think that quote is describing focus, and I think I am being focused - just on a broader topic than the material in front of me.  Instead of learning how one author sees Ruby, or how one college professor teaches Python, I'm constantly having to relate the material together and learn the underlying CS.    

Of course, they syntax of any particular language isn't sticking so well in my brain due to the jumping around, but the philosophy of each language is what I'm really after, along with how to approach writing programs.  If I can learn that, I can google any syntax I need pretty quickly when I sit down to write stuff.


Rad wrote on Feb 14th, 2009 at 10:02pm:
Your mountain right now is Programming. How do you chose WHICH course you will study at any given time ?? What *feels* right?  

I've been reading Ruby at work when there is downtime.  A lot of our tools have been writen in Ruby the last few years, so this way I'm actually still being 'productive' on the clock.  

Watching the videos is slightly less involved for my brain, so I do that more toward the end of my shift, when I'm too low on motivation to do the work of reading.  

So far, my Python book has stayed at home, next to the TV remote.  When I have the urge to watch TV, I read instead.  It's just as relaxing to me, since I don't like most TV much anyway.

Title: Re: Best Programming languages to learn to get a job
Post by Nigel Bree on Feb 14th, 2009 at 11:43pm

Rad wrote on Feb 14th, 2009 at 3:26pm:
SICP is an introductory programming course, yes?

Yes, but for first-years at MIT, the most prestigious school for engineers in the world, where a good number of the greatest minds of the 20th century have studied, researched, and taught.

There is also a simple thing to bear in mind about most college courses, which is that students rarely appreciate all that a course has to offer precisely because they don't have sufficient context to realise the importance of some of the content, or have other goals in taking a course than to advance in a field. Lots of important knowledge links together in ways that are obvious once seen, but in order to be seen one needs a certain perspective that is unattainable to most novices. That doesn't mean that college courses shouldn't present such things at all - rather, it's that they serve diverse purposes for diverse students. Some students aren't interested or able and won't progress and others will drain every last drop of insight and who are destined to go on to greater things, and so finding out which students are able to grasp the harder concepts is also part of what the courses are there to do.


Rad wrote on Feb 14th, 2009 at 7:03pm:
I think Fortran was a teaching language prior to Pascal

Not at all. FORTRAN was one of the earliest computer languages and was not a teaching language at all but aimed at doing serious numerical work with high performance (hence the name, FORmula TRANslation, coming from its aim as a vehicle for engineering mathematics). Indeed, it's arguably still one of the most important; partly that's due to the fact that having been around since 1956, there is a staggeringly large body of code. A good deal of numerical supercomputing - modelling weather and climate, simulations of nuclear physics, lots of astrophysics, and so forth -  is still largely done with Fortran.

Fortran 95 updated Fortran with object-oriented programming and Fortran 2003 has evolved it further still. It's still used, still relevant.

Title: Re: Best Programming languages to learn to get a job
Post by Nigel Bree on Feb 14th, 2009 at 11:58pm

Rad wrote on Feb 14th, 2009 at 3:26pm:
Do I understandly correctly by inferring the subtext of what you have said here that you feel SICP is best set aside until someone has a requisite amount/level of experience?

Not at all. Merely that you'll need a lot of experience to appreciate all it has to offer. As long as you have the ability or experience to connect with it at some level, you'll learn some very valuable things. You may or may not grasp the real jewels it has to offer the first time, but that does not make it any less worthwhile.

It will, however, reward you with even more if you return to it in a couple of years once you do have that context. Reading it again, a sentence that will have generated bafflement or a shrug the first time around will touch off a moment of sudden recognition, and ideally a new understanding will become crystal clear.

By the way, as is made clear on the main page videos they were not given to the regular MIT students, but are recordings made by a cadre of HP engineers for whom a private version of this course was given. That's why the videos do assume the prior experience they do, because the audience had it.

Title: Re: Best Programming languages to learn to get a job
Post by Nigel Bree on Feb 15th, 2009 at 12:08am

Rad wrote on Feb 14th, 2009 at 3:26pm:
couldn't help but compare that to the HtDP course which supposedly takes a typical college student an entire semester

Bear in mind that university undergraduates regardless of ability have a lot on their plate; they are expected to work on half a dozen or more courses (often in diverse fields) over that time, and that course loads are typically set and paced by university regulations for "regular" students. The time requirements for the HtDP (or SICP) courses are there primarily because the coursework - represented by exercises in the book - need to be completed by students outside lecture time and returned for grading.

So, in one sense the difference in time requirement isn't as great as it might first appear. The difference is still real though, but it's more a qualitative one - because all the kinds of course that do promise that kind of instant reward aren't aiming to instil any insight at all. They are merely "how to do simple things in a getting-by subset of the language", and nothing more than that.

Title: Re: Best Programming languages to learn to get a job
Post by Rad on Feb 15th, 2009 at 10:57am
If you were king (knowing what you know about Programming) and in charge of designing a cirriculum for advanced first-year college students (tho not gifted ones), with no prior Programming experience, given the resources currently available .. how you would design such a course (and why). Have you ever considered devising such a course? I would be interested.

Regarding Fortran, I ran across this today:


Quote:
Lisp is the second-oldest high-level programming language in widespread use today; only Fortran is older.

Source: http://en.wikipedia.org/wiki/Lisp_programming_language

Title: Re: Best Programming languages to learn to get a job
Post by Nigel Bree on Feb 15th, 2009 at 2:36pm

Rad wrote on Feb 15th, 2009 at 10:57am:
only Fortran is older.  

I highly recommend you read this memorial of John Backus, who created FORTRAN and did many other important things (BNF, contributions to Algol 60). His ACM Turing Award lecture of 1977 indeed basically says that functional programming - the style built directly on the lambda calculus - is the right way forward.

Which it is, but it's unlikely to ever displace the linear style now.


Rad wrote on Feb 15th, 2009 at 10:57am:
Have you ever considered devising such a course?

Not really, and there are plenty of models of proven courses to choose from out there. But remember that there is - now, anyway - no real appetite among students for such things. Once you limit yourself to a) capable students who are b) motivated enough to engage with this sort of material you're down to a small fraction of the undergraduate intake at most universities. Some universities are set up so that they can get funding to satisfy such a small niche; others, not so much.


Rad wrote on Feb 15th, 2009 at 10:57am:
given the resources currently available

The resources currently available aren't really that different to those in my day, since places at the few elite universities aren't available to enough people in the world. I had no real trouble then, pre-WWW, in a small corner of the world, finding more than enough textbooks to fuel my self-learning.

Title: Re: Best Programming languages to learn to get a job
Post by Rad on Feb 15th, 2009 at 5:02pm

wrote on Feb 15th, 2009 at 2:36pm:
there are plenty of models of proven courses to choose from out there

Where?

I read somewhere that the best programmers are self-taught.

Title: Re: Best Programming languages to learn to get a job
Post by Rad on Feb 15th, 2009 at 5:07pm

wrote on Feb 15th, 2009 at 2:36pm:
functional programming - the style built directly on the lambda calculus - is the right way forward

Why? (if you can answer this easily)


wrote on Feb 15th, 2009 at 2:36pm:
the linear style  

What is this?

Title: Re: Best Programming languages to learn to get a job
Post by Nigel Bree on Feb 15th, 2009 at 5:21pm

Rad wrote on Feb 14th, 2009 at 10:02pm:
I've read somewhere that geniuses have the quality of being able to focus on one thing at a time.

By the way, a discussion of high ability, cognitive or otherwise, is perhaps another thread entirely. I'd suggest however that the term "genius" be avoided as it is far too broad and ill-defined to use casually.

On the question of high ability as it relates to software development, mental multitasking as such is not really a signifier - quite the opposite, as multitasking is something that destroys flow state, when we are at our most productive. I believe it was Gerald M. Weinberg who made the observation that one of the notable things that software developers of exceptional ability do do, however, is shift levels.

That is, they can shift viewpoint effortlessly; from top-down decomposition of the broad canvas to the tiniest bottom-up detail of the code, without losing sight of how everything relates together. Their understanding of the system is total, and holistic; the connection between expert software development and the kind of understanding of problems in systems theory should be clear (Ludwig von Bertalanffy's General Systems Theory is a worthy read, although hardly a light one).

[ Speaking of light reading: yesterday morning on Radio New Zealand's Sunday Morning show, an interview with Alexander McCall Smith; I loved the "No 1. Ladies Detective Agency", although I don't know if they are particularly popular in the U.S.

On a less light topic, an hour later on the same show, the Victorian (where the bushfires are) Government's climate change adviser discussing the bushfires. ]

Title: Re: Best Programming languages to learn to get a job
Post by Nigel Bree on Feb 15th, 2009 at 8:36pm

Rad wrote on Feb 15th, 2009 at 5:02pm:
Where?

Pick a suitable university with a respected CS programme whose admissions policies match the student ability level you are thinking of (I really don't know quite what you had in mind by advanced but not gifted).


Rad wrote on Feb 15th, 2009 at 5:02pm:
I read somewhere that the best programmers are self-taught.  

Well, sure. Frankly, that should be true of most graduates in most fields, too. A university course does more than just shovel information at students. The best thing it can do is to get you to develop good personal self-study habits, which include a lot of learning by doing. The assignments - the reading lists, and graded exercises - are where the real meat of a quality course tends to be, and once you have those personal study habits learned it's not too hard to take on just about anything given enough time and a text list.


Rad wrote on Feb 15th, 2009 at 5:07pm:
Why? (if you can answer this easily)

I'd say we should hold off on that until you've finished HtDP. An explanation should make more sense then.


Title: Re: Best Programming languages to learn to get a job
Post by Larry Fortyman on Jul 13th, 2009 at 8:03pm

Rad wrote on Feb 15th, 2009 at 5:02pm:

wrote on Feb 15th, 2009 at 2:36pm:
there are plenty of models of proven courses to choose from out there

Where?

I read somewhere that the best programmers are self-taught.


I agree with this twelve-hundred percent.

Radified Community Forums » Powered by YaBB 2.4!
YaBB © 2000-2009. All Rights Reserved.