The Wayback Machine - https://web.archive.org/web/20081003065819/http://blogs.techrepublic.com.com:80/programming-and-development/?p=396
On TV.com: HOUSE

This weekend, I finally sat down and did something that I promised myself I would do for around a year now: I started working with F#. The experience was really quite interesting. For the first time in more than a decade, I was not able to just sit down and grok a language by staring at some sample code for a few minutes. The experience highlighted the current miserable state of affairs in the world of general programming languages. Sure, I have railed about the mediocrity of VB.NET, C#, Java, and so forth in this space many times in the past. But it fascinated me to see how the way I think has been so heavily influenced by what I do.

I first encountered a functional programming language in 11th grade working with EdScheme. While the syntax of F# is rather different from EdScheme (EdScheme is a version of Scheme, which is a dialect of Lisp; F# is based upon OCaml), many of the principles are the same, especially with regards to the concept of “labels” as opposed to “values.” In the functional programming world, there tends to be an avoidance (or outright banning) of the concept of a “value”; instead, every identifier actually acts as a label to refer to a particular function. For example, “let x = 5 + y” does not actually set the value of x to be the value of y plus the number 5. Instead, x is a function that when called, calculates 5 + y and returns it. As you can imagine, thinking in this way is a radical departure from the hallowed halls of the procedural code that most of us spend most of our time working with.

As a side note, I include object-oriented (OO) code in the “procedural code universe,” simply because at the rawest, lowest level, every OO program ends up in a very traditional, procedural thought process. In other words, the OO is simply a very pretty and well-organized hook to access and write procedural code.

Putting that aside, I found my mind struggling so hard with certain concepts. What was truly frustrating is that I used to know this. It is not just that I was a bit rusty or out of practice, I found myself actively struggling to think like F# was asking me to. Imagine if you tried to ride a bike, and your foot reached for the gas pedal just because you have been driving for 15 years, and you will get the idea.

It reminded me very much of a conversation that I had a few months ago. The person I was speaking with was a programmer visiting the U.S. from India. This gentleman and I had gotten to know each other fairly well, and he has been programming for quite some time, probably around as long as I have. He and I got onto the topic of education. It is a well-known fact that India, China, and a number of other countries are beating the U.S. in math scores. So I asked him how they teach math in India. He was almost baffled by the question, as if there was more than one way to learn math and this was the first time someone had let him know. “From a book, with examples on the blackboard, how else?” I queried him about the use of calculators and computers, two tools quite common in U.S. math education. He explained to me that calculators are forbidden in their version of high school and that, in colleges, the calculators allowed are basic models (think add, subtract, multiply, divide, exponents, square root, log 10, and natural log), and their usage even then is frowned upon to the point where using a calculator will be the cause of ridicule and humiliation. This sure sounded like a far cry from the educational environment in the U.S., where 7th grade students are now being required to own TI-85’s, a calculator that’s probably more powerful than the guidance system on a cruise missile.

Where this all comes together is the idea of fundamental methods of thought. Writing code (and writing it well) requires the ability to think a certain way. As my experience has taught me repeatedly, once a way of thinking is set, it is hard to think differently. In the case of F#, a way of thinking that was easy when I was an extremely inexperienced user is tough now that I am at the experienced level. The solid foundation of thought which was laid by an excellent early education has had a ramshackle house built upon it, which must be cleared away if I want to build a nice new home. But at least if/when I demolish that rat trap, I will still have a solid foundation, a clean well, and good plumbing to build upon. The hard work is done and I just need to rebuild the house itself. For someone who is trying to build a ramshackle house on a bare ground foundation, there is going to be a real problem. This is why the issue of general education so concerns me.

I know I can learn F#. While the curve was higher for me to get even rudimentary levels of understanding than usual, it is imminently possible. I just need to keep reminding myself how functional languages work, and I am fine. But for the person without those experiences, without that fundamental basis of thought, how can they learn this? I have no idea. Is understanding a functional programming language a requirement to be a programmer? Of course not. Many excellent programmers have never touched one and that is fine. Nevertheless, the methods of thinking taught by such an experience is invaluable. I know that my encounter with EdScheme taught me a lot about being a good programmer, even if I have become stuck in a “general purpose OO language” rut for some time now.

This is why the conversation with my Indian friend has me so worried. It seems to me that the schools in India, China, and many other countries are laying extremely high quality general education foundations for their students. I look at the “math” that my brother and sister learned (I am much older than they are), and I do not want to subject my child to the same kind of disastrous “education” (I am officially not a parent yet, but he is on his way in a few more days or weeks!). I love to see the best brought out in people. A mathematical foundation built upon computers and advanced calculators simply does not provide the basis to build a good programmer on.

I think that once I get through this F# experience (I want to learn more about it to evaluate its suitability for real-world programming), it is time to get back to the basics. A reader a few weeks ago recommended some books by ER Tufte, so I think that I will start there. In my current role, hands-on programming is minimized. I need to get my principles polished up again to be the best that I can possibly be.

J.Ja

Print/View all Posts Comments on this blog

General education andf programmingJustin James  | 05/21/07
Have to ask some one youngerTony Hopkinson  | 05/22/07
Could Be The Teacher Or The Course Or BothJoules Ampere  | 05/31/07
You underestimate the problem of calculators.Absolutely  | 06/07/07
Assembler anyone?Bob G Beechey  | 06/02/07
I can see thatJustin James  | 06/02/07
Honeywell GMAP (6060 Assembler) was the second language they taught usrclark@...  | 06/04/07
The bare bones stuff...Justin James  | 06/04/07
CPMrclark@...  | 06/05/07
58 K, you'll never use that up !Tony Hopkinson  | 06/05/07
Tony: I see you have experienced the phenom.rclark@...  | 06/06/07
DOE just released report on State Education Rankingsrclark@...  | 06/08/07
I see a link.Locrian_Lyric  | 09/09/08
calculus: for those both intelligent and small-mindedapotheon  | 09/09/08
You don't need to know calculus to be a mathematicianalex.kashko@...  | 09/13/08
Yes and NoTony Hopkinson  | 09/09/08
Tony and Apoth...Locrian_Lyric  | 09/10/08
Logical thinkingTony Hopkinson  | 09/10/08
Indian engineers are the same as usRexWorld  | 05/22/07
Not really about India vs. US...Justin James  | 05/22/07
Interestingly enoughKeeBored  | 06/08/07
Edited for what? Speaking the truth?Why Me Worry??  | 06/04/07
Beth...ever heard of freedom of speech? This PC bullcrap must stop!Why Me Worry??  | 06/12/07
High school vs. college...bgrimsley@...  | 09/09/08
Exploring alternatives for real world programmingMark Miller  | 05/23/07
Frames of referenceJustin James  | 05/26/07
degrees and passing by referenceapotheon  | 05/27/07
Generic title...Justin James  | 05/27/07
indeedapotheon  | 05/27/07
On the flip side...Justin James  | 05/28/07
Well, heck . . .apotheon  | 05/28/07
I sent you a message...Justin James  | 05/29/07
Got it.apotheon  | 05/29/07
No worries!Justin James  | 05/29/07
ChoicesAmbercroft  | 05/31/07
Agreedpaul_e_ray@...  | 06/04/07
DegreesJustin James  | 06/04/07
It's the same for Chem and PhysicsM.W.H.  | 05/24/07
International EducationSDH_NetService  | 05/24/07
Nothing much has changedMark Miller  | 05/24/07
Interesting thoughtJustin James  | 05/24/07
Not only good programming is affected ....Gast�n Nusimovich  | 05/31/07
The study of mathematics teaches you how to "think"DougOfCBS Techrepublic | 05/31/07
Always, really ?Tony Hopkinson  | 06/04/07
Not always...Justin James  | 06/04/07
all else being equalapotheon  | 06/04/07
Exactly the problemTony Hopkinson  | 06/05/07
Um . . . what?apotheon  | 06/05/07
Er first programming then mathTony Hopkinson  | 06/05/07
Ahh, gotcha.apotheon  | 06/05/07
Lucky for me...Justin James  | 06/05/07
Good job!apotheon  | 06/05/07
Yup, and thanks!Justin James  | 06/05/07
Not Sure Math Logic == Programming LogicWayne M.  | 06/06/07
No guarantantee, that is for sure!Justin James  | 06/06/07
Debuging and Auto MechanicsDHamblet  | 06/10/07
MechanicsJustin James  | 06/11/07
Proud Pappa Mode (Be Warned)rclark@...  | 05/31/07
This is the case in any area of studyKeeBored  | 05/31/07
Made me think of something...Justin James  | 05/31/07
Well, there is no need to have a degree anywaysKeeBored  | 06/01/07
I disagreerclark@...  | 06/01/07
MisunderstandingKeeBored  | 06/01/07
I'll put it this way...Justin James  | 06/01/07
It's a matter of choiceJellyyacht  | 06/04/07
After 30 years anyone who asks about your educationTony Hopkinson  | 06/04/07
Education & Experience Work TogetherSDH_NetService  | 06/04/07
Progression through the industry ?Tony Hopkinson  | 06/04/07
It says a lot...Justin James  | 06/04/07
After a certain point...Justin James  | 06/04/07
What doesTony Hopkinson  | 06/05/07
I can agree with that...Justin James  | 06/05/07
re: RPNapotheon  | 06/04/07
Sorts out that 3 * 5 + 6 problem as wellTony Hopkinson  | 06/04/07
No no no, you've got it all wrong.apotheon  | 06/04/07
I didn't have a penny to go to College, but I wentKeeBored  | 06/05/07
translation:apotheon  | 06/05/07
Total disagreementKeeBored  | 06/05/07
How I started to make it work:apotheon  | 06/05/07
The age requirement...Justin James  | 06/06/07
Exactly the problem.apotheon  | 06/06/07
Do you have "nothing else to do"?Absolutely  | 06/08/07
Wasn't age as such in the UKTony Hopkinson  | 06/06/07
Reply To: how I started to make it workKeeBored  | 06/06/07
narrow experience doesn't translate to broad knowledgeapotheon  | 06/06/07
Dear KeeBored:rclark@...  | 06/07/07
Thank you, rClarkKeeBored  | 06/07/07
expectations versus agitationapotheon  | 06/07/07
You just don't get it do youKeeBored  | 06/07/07
you don't seem to get the concept of avoiding accusatory, insulting commentapotheon  | 06/07/07
To Chad. Get a job? Take a loan? Join the military? Transfer?georgeou  | 06/07/07
Who are you talking to?apotheon  | 06/07/07
To Georgeou: AgreedKeeBored  | 06/08/07
irrelevant remarkapotheon  | 06/08/07
You don't need to take criticism of the government personally...Absolutely  | 06/08/07
To Apotheon: I won't even waste my timeKeeBored  | 06/08/07
I believe you just did.Absolutely  | 06/08/07
To Absolutely: IndeedKeeBored  | 06/08/07
To Absolutely: It is all excusesKeeBored  | 06/11/07
more and more offensiveapotheon  | 06/12/07
Learning, Knowledge, and LimitationsC_Tharp  | 06/04/07
what school is really worthapotheon  | 06/04/07
I disagree, to a pointJustin James  | 06/04/07
learning environmentsapotheon  | 06/04/07
YupJustin James  | 06/05/07
Was that a time and a place thoughTony Hopkinson  | 06/05/07
Very much so!Justin James  | 06/05/07
Not reallyKeeBored  | 06/05/07
Well there you goTony Hopkinson  | 06/05/07
Yes, really.apotheon  | 06/05/07
In Hiring, I Want Someone Who Can Program Really WellWayne M.  | 06/06/07
I thought they taught everybody to build compliers.rclark@...  | 06/06/07
InterestingKeeBored  | 06/06/07
Well dynamic sql embeddedTony Hopkinson  | 06/07/07
That is why you develop using a layer modelKeeBored  | 06/07/07
My credentials? - MrTony Hopkinson  | 06/07/07
My dear friendKeeBored  | 06/07/07
A cautionary taleTony Hopkinson  | 06/07/07
28 hours down to 15 minutesrclark@...  | 06/08/07
The tech isn't the problemTony Hopkinson  | 06/08/07
In Hiring...Bob Gately  | 06/07/07
2B or not 2B, That is the QuestionWayne M.  | 06/07/07
2BsBob Gately  | 06/07/07
Well saidKeeBored  | 06/08/07
Competency and talentBob Gately  | 06/08/07
Computer Science education in particular is declininggtoal@...  | 09/11/08

Trackbacks

The URI to TrackBack this entry is: http://blogs.techrepublic.com.com/programming-and-development/wp-trackback.php?p=396

No trackbacks yet.

Recent Entries

Archives

TechRepublic Blogs



Planning for Disaster Recovery
To prevent data loss and maintain business continuity in times of crisis, IT pros must make disaster planning a top priority. This guide will help you ...
Buy Now
TechRepublic Power Checklist: Securing Windows XP
If you have just finished installing Windows XP and you think the work is done, you're wrong. Some of the most important steps to getting Windows XP u ...
Buy Now

The PC Cracked Open

advertisement
Click Here