views:

983

answers:

22

Currently I am in college to be a business app developer of sorts. We're learning C#, and VB.NET almost exclusively right now. This makes me think as to why we are. I've read that C# is efficient with almost anything you could ever want to do with it, and that's great. We tend to do a lot of those out of the book review projects, which gets tedious fast killing what ambition I might have had for the languages. Again, I thought about how we learn the languages that we do and figured that it might be interesting to know how others have learned the languages they know.

My question though, is simply what languages have you learned and how did you learn them? What do you use the languages for(if you know more than one and use them quite often)?

If you would be so kind, and if it is available post a link to some material that helped you learn it.

Forgot to mention what I know. Doh!

I learned HTML in the middle of my Freshman year in high school. I decided that my days of homework and video games where over when my homework was taking up so much time. By chance I had a web course, which then introduced me to HTML. Instantly I fell in love with it, perhaps for the simplicity of it, and haven't looked back since.

After that came CSS, of course. I used to know a bit of Javascript, but I haven't used it in forever so really I have no clue anymore.

Then came PHP in college. I personally love it and hate it. I want to focus on app development but PHP refuses to let me be especially with database interaction.

After that I started on VB.NET which is incredibly... not for me. Which, I hear, is weird as C# and VB.NET are extremely similar. I guess I don't like calling things Dim, oh well though.

Now I am working on C#. I absolutely love it. Though I do wish I had started on something for the "fundamentals" of programming rather than the tease of Visual Studio and the drag and drop forms.

+2  A: 

You can read all you like and listen to podcasts all you like but the real answer is that you have to WRITE CODE. There is no way around that. Use samples, etc, anything, but you need to look at code and write it.

EDIT Also note that many people learn a language like C or Pascal or C++ or Java or Scheme in college comp sci courses. Once you learn one - much of it can translate into other languages. So the learning curve is not so great. However, note that dissimilar languages or programming paradigms do not fit here.

Tim
A: 

With the languages that I have learned (PHP, Python, PAL, ...) I have learned them by using them I attempted to build something then asking people who were more framilliar with the language to look it over and offer suggestions.

This has worked well for me, but I am a certain personality, I like problems, and hate the dull that happens when the code is not challenging.

Unkwntech
A: 

In college I learned C, BASIC, Assembler, and PASCAL.

What learning these languages did was prepare me for learning other structures and object oriented languages. It only takes one good language to teach someone how to actually program (thought processes, approaches, language constructs, etc) IMHO... after that it's just a matter of syntax and capabilities.

Every other language I learned since then has been through a combination of self-study (books) and practice.

Currently I develop in C# (console apps, ASP.NET, and Windows forms apps), ActionScript 3.0, MXML, T-SQL, Javascript, HTML, and CSS. Everything was learned out of a book and through example.

Andy Webb
+1  A: 

Wow, I wish my school taught C#, we code primarily in Java/C++ with a new hint of Ruby.

If you are going for corp. grade programming - I'd definitely advise staying on your current path with .net languages. Other languages you may want to pick up on:

  • C/C++ - these are critical, the real nuts-n-bolts of programming
  • Javascript / JQuery - Planning on doing any web-dev? Learn this
  • Java - Great versatile language that can be migrated around to pretty much any platform
  • Ruby / Ruby on Rails - Excellent platform, quick language to pick up
Chance
My school taught us HTML, CSS, and PHP-SQL before moving onto C#. I looked into RoR just as this semester began. When I get a longer break I'll look again. JS/JQ might be fun, but Java just gives me headaches when thinking about it. I've never encountered a smooth program running written in it.
Xesaniel
Problem with learning C# in school is how *fast* that sob evolves. There are so, so many wicked advancements coming down the pipes right now. Of all the languages I listed, C# is the most impressive. Try to stay on top of all of the innovations coming out.
Chance
I graduated from school in 1983. They taught me Pascal, but that is irrelevant. I teach myself new languages as they serve my purpose. The key is "I teach myself".
dacracot
+5  A: 

Depending on what you're going to do, you may eventually want to go beyond the protective shell of C# and learn things that are more "on the wire" and closer to the hardware like C++ or assembly. And no, there are a lot of things you can't do with C#, but it's very possible that you'll never need to, but it's still good to understand.

Over the past 22 years, I have learned many languages (listed below chronologically). I use very few of them today, but learning them helped me understand more and appreciate more, and generally expand my toolbox. You can find great resources online today, and much better books than there were 10-20 years ago.

Anyway, here are the languages I learned:

  • LOGO in the second grade. Still a brilliant and unappreciated language, IMHO.

  • BASIC on my Apple, first because whenever a game crashed I was thrown into the prompt, then with the few books I could find in Hebrew. Not knowing English at the time and being 9 didn't really help.

  • Assembly for the PC from a crappy book, I was about 10, never really built anything interesting.

  • Whatever language that Hypercards on the Mac classic used. I was stuck in a house during the first gulf war with only an old mac to play with.

  • Pascal when I started junior high and got access to a compiler. Just from the help system. Learned OOP without knowing what it really means initially from the Turbo Pascal help system.

  • C a year later, when I got annoyed with Pascal.

  • C++ a few months later when I realized that C didn't have the objects that I got in the Borland pascal.

  • Scheme at a summer camp when I was about 14. That's what they taught (math department...)

  • Various languages in college (ML, Prolog, etc.). Never used since then, but it improved my understanding.

  • Various languages working at Intel during college (perl, VB, some proprietary languages).

  • Smalltalk in grad school. Loved it and I wish it would be revived. Moving to Java (just figured out from code examples) was a great help there since I at least had some reflection.

  • Some other stuff randomly since then. More out of curiosity than for any practical reason.

Uri
That's very interesting, I wish I'd started earlier.
Xesaniel
I wish I was born later... I wasted too many years on dead end languages with no real resources or software, and no real books, communities, etc. Today with so many free tools and the internet, the possibilities are so much greater...
Uri
A: 

Your college should teach you how to learn a programming language by yourself, not specific techniques in a particular language. At least this is the case for computer science students.

IMHO, at least one functional language is required to appreciate the beauty of programming languages, and C is particularly bad for this purpose because you often found yourself stuck in some low level details. However, C allows you to understand deep and difficult concepts like hardware, OS, compiler, etc.

Starting from an OO language is probably a bad idea too for similar reasons. You might found yourself having hard time remembering all the details of class inheritance and encapsulation, but it is all too easy to overlook what programming languages are all about, and they usually hide system details that C exposes to you. It is quite easy to understand OO once you mastered a functional language or C, but the reverse can be very difficult.

PolyThinker
We learn by the books. I'd like to see some syntax and general uses for the languages though. As seeing concepts in action tends to help me, which is why I loved web design work. Click refresh and there you go, all of your changes are there. I program as much I can, not too great yet though.
Xesaniel
Most people learnt whatever their lecturers taught them :) It is indeed a good way to pick up a language quickly by developing real stuff with it. However, I think it's equally important to discover the fun of studying programming languages themselves. This will help you pick up new languages later.
PolyThinker
+1  A: 

I skipped college, so I can't speak to that experience.

I started as a pure web guy, doing HTML, light Javascript, perl and CGI via UNIX C-shell. This was back in '97.

I learned Java in '99, under the gun. I'd moved from Pennsylvania back to Chicago to take a job with a certain large manufacturer of cell phones. They never mentioned that they wanted a software developer, a Java programmer, or anything of the like -- they wanted a web/content guru. I got out here, and found out what they really wanted. They gave me a desk, a workstation, a book and a week to get up to speed on Java. I believe the book was Sun's official Java tutorial. I did it, but (of course) with issues -- never having professionally programmed before, my code was in desperate need of review. However, the bug had set in ...

I learned VB6 (ugh) on the job at my next position (using Murach's Visual Basic 6, and doing additional exercises), and began learning both C# and VB.NET then. (That was early 2001, when the public beta had just become available to anyone with $12 for shipping and handling.) I taught myself VB.NET and C# (and the .NET Framework) via the tutorials included on the discs.

I learned a lot MORE about .NET through doing. I've read perhaps a dozen books, and being a former trainer, almost all of Microsoft's .NET 1.1 materials. (I stopped training professionally, and let my MCT certification lapse, before .NET 2.0 was released.) The books are helpful under specific circumstances: Beginner books are good if you need to get up to speed quickly and are willing to go out on your own and find your own exercises to fight. Expert books are good when you already know how to get there from here, but want the finer details.

I recently taught myself the "basics" of C via K&R. As always, you have to do the challenge exercises on your own to really get it. In this case, I still don't 100% get C, but I feel much better off than I once was -- and some of its tougher concepts are much easier for me now (though this is largely due to the StackOverflow community).

Finally, I'm in the process of teaching myself Objective-C and Apple's Cocoa framework, once again, from a book (Cocoa Programming for Mac OS X, 3rd Edition). This falls into my "beginner books" diatribe from the .NET world: You have to challenge yourself, even when the book does not provide self-directed exercises. Early on in the book, before it provided challenges (Aaron Hillegass's term for exercises without guidance), I gave myself one: Take a command-line tool built in that chapter, and slap a halfway decent user interface on it. This required not only building the interface in Interface Builder (easy), but wiring it up, making sure I had a properly-designed Controller class, and then writing the presentation code. Lots of fun! :)

So ... How did I learn languages? Combination of reading and doing. Doing is really important -- you have to do all the exercises in the book, but you also have to challenge yourself to do more. You need to come up with your own exercises and ideas, and see them through to completion. Then you can feel like you "know" a given language.

And no one gets everything right the first time. Many of us don't get it right the eighth time. But keep at it. And code. Code, code, code. Day and night. When you dream in code, then you know you are a developer. And you'll never look back.

John Rudy
A: 

I learned C# by constantly attempting to translate code on the net into VB.NET so I could code it in a language I understood... then eventually it became as easy to write C# as it was to write VB... I still think of myself as a VB programmer and write all my prototypes in VB. Depending on which audience my code is for, I might translate it to C# or not. Some great resources for this is DeveloperFusions conversion tool which can translate back and forth:

I learned PHP because a client needed a website fixed in a hurry and he didn't have anyone else to do it. So it was a case of learn what I needed to in order to finish the job... the biggest thing I learned was that I can't stand PHP. It is very similar in a way to the classic ASP structure, and as I'd already previously learned ASP, it was fairly easy to pick up the design paradigms. So I guess I learned pretty much everything I know about PHP from someone else's code which was to very poor standards - but syntax is syntax, you can learn syntax even from the worst coders around.

Back in university I learned Pascal...I eventually forgot how to program that though when we moved onto VB3. I can still just about read and follow Pascal but I don't think I'd be able to competently write a decent application using it without some serious refreshment. Since moving to VB3 I moved up with each iteration of the product all the way to version 9 (.NET 2008). I tend to learn most of what I need from the many books on my bookshelf, various blogs and programming communities like StackOverflow.

The biggest learning curve for me I think was the leap into .NET from classic VB6 because it took on a completely different form than the applications I was used to writing - I'd read about C++ in books but had never written anything in it, so to move from the VB model to a much more C++ like model underneath a VB style syntax was a little odd. In fact, I had to get a tutor to take me over the differences in the basic design paradigms. Once I got over the complete shift the syntax was a piece of cake.

I attempted to learn JavaScript years ago from Netscape's Developer Documentation - back in the days of Internet Explorer 4.0 but it was a disaster, I just had no idea, the cross browser differences were ridiculous and the documentation was poor at best. I just relearned JavaScript last year so I could develop some AJAX functionality for a web application - it's much easier now that MSDN and Mozilla both publish relatively comprehensive documentation...and knowing C# and being much more familiar with the DOM made it far easier to spot the coding patterns and pick up the language.

A great resource for all the cheat sheets for various programming languages can be found here - it's great for a kick off to a new language as you need it:

One "language/tool" that has helped me across many languages is Regular Expressions - it's one of those tools that you don't necessarily need, but once you learn it you'll wonder how you ever lived without it - like your cellphone. You can use in a whole bunch of languages without changing the syntax very much at all. It's not what I would call easy to get your head around, but with a couple of good cheat sheets and someone to walk you through the basics, it'll take you a long way. I have the added bytes cheat sheet in my favourites list: Added Bytes - Regular Expression Cheat Sheet. I learned most of what I know about them from http://www.regular-expressions.info/ though. Just for added amunition, I also use a tool called RegExBuddy which allows rapid prototyping and testing of regular expressions. Well worth every penny of the $39.99 they charge in my eyes.

BenAlabaster
A: 

I started with assembly language, and a copy of Norton's Assembly Language (translated into Swedish. Badly.)

It was a good way to understand how computer programs work at the very lowest level.

It did not help me learn about OO or functional.

Jay Bazuzi
+2  A: 

Most languages I've learned were because I had some need for them or because I worked for someone that used it. These days if I pick up a new language, I generally read enough of the documentation to get a feel for the language, its rules, and its idioms. I then start hacking and pick up the rest as I need it.

  • BASIC: high school (course requirement)
  • Pascal: high school (course requirement, but learned objects on my own by reading the manual)
  • C & C++: picked up on my own in high school (needed a faster language for my hobby projects, read the manual and learned from examples)
  • x86 assembly language: picked up on my own in high school (needed to for micro-optimizations for a hobby project, used the asm manual that came with Borland C++)
  • Perl: learned as part of an internship (www!, read the O'Reilly book)
  • Modula 2: college (ugh)
  • various assembly languages: college (once you learn one...)
  • Java: on my own and internships (ah, a language with lots of almost-portable standard frameworks, started with Sun's Java tutorial)
  • Javascript: on my own and internship (prototype-based languages let you do some funky aspect-oriented stuff, read some books and looked at a lot of source)
  • Matlab: college & grad school (gotta love it for rapid prototyping of numeric code)
  • Scheme: learned it while teach a class that used it (higher-order procedures and functional programming are handy thing to know and understand, stayed 1 week ahead of the students)
  • Python: internship (semantic whitespace is silly and there are a lot of rough edges, but it can be a very productive and nifty language; read some of the docs and started hacking)

These days, I mostly use Matlab and C++.

Mr Fooz
A: 

in college, I learned IBM 370 assembly language, PL/1, and Pascal - all of which were useless in the business world.

in the business world, I learned BASIC, 6502 assembly language, C, C++, DataFlex, Prolog, Lisp, Java, VB, VBScript, Javascript, HTML, CSS, VB.NET, C#, and probably some others that I've forgotten about - all on my own, by reading tutorials in books and on the web (in far less than a semester, sometimes in just a few days!) and then jumping in and using the language to solve real problems.

while you're in school, you will be given essentially toy problems to hopefully illustrate some fundamentals.

when you get out of school, you will be given real problems and may have to learn a great deal at a frantic pace. So the best thing to learn in college is not just some CS fundamentals but more importantly how to teach yourself quickly.

then it doesn't matter what the "language du jour" is, you can handle it!

Steven A. Lowe
+5  A: 

I've learned more languages than I can count. In roughly chronological order:

  • APL (1972) and PL/I (1973) though summer school at my local university
  • Self-taught BASIC in high school (really learned by being given a large BASIC program to extend and maintain in 1978)
  • Pascal and 370 assembler in college course (1979)
  • C for a job designing X-ray mirrors (circa 1984)
  • Lisp and Ada for a job on formal verification (1986-88)
  • ML through working on a compiler for ML :-) (1988)
  • Awk from reading Jon Bentley's Programming Pearls columns, and because in 1988 it was in the air
  • Tcl from Ousterhout's paper and the documentation late in 1990, because it was the coolest idea (but the world's worst language, except for TeX)
  • Modula-2+ from working on a summer project in 1990
  • Modula-3 from working on a systems project circa 1990-1992
  • Icon from building a successor to a code-generator generator written in Awk, from the Icon manual, circa 1992
  • ksh from the man pages because by 1993 I needed a decent shell
  • Lua from the manual because in 1996 it was instantly clear that it solves the same problem Tcl does, only better, and is designed and built by good engineers
  • Objective Caml around 1999, easy from the manual since I already knew ML, learned to build a compiler
  • Haskell from seeing a lot of Haskell code, knowing ML, and reading the manual, circa 1999-2007
  • Smalltalk from the blue book and from implementing a version I could use for teaching (circa 2000)

I'm sure I'm leaving some out. By far the common thread is that I learned a language by building a significant project or in order to build a project. You should too :-)

Bonus answer: what's the minimum you should you learn to broaden your horizons?

  • C because there's nothing like C to expose the way the machine actually works

  • A pure functional language; Haskell or basic PLT Scheme are good choices (most complex and least complex)

  • A pure object-oriented language; Smalltalk and Ruby are good choices

  • A so-called "scripting" language; Lua and Python are good choices (but Ruby is also considered "scripting")

Looking at my chronology, I need to learn some new langauges. (Problem is, no time for new projects.)

Norman Ramsey
For purely learning how a machine works, I recommend assembly over C. However, C is generally much more useful ;-)
DCookie
+2  A: 
skiphoppy
Huh? I'm not sure what that means.
skiphoppy
+1  A: 

I've learned a handful of languages, but I think my Java story is probably the only "interesting" one. Throughout middle and high school I (unsuccessfully) tried a few times to learn Java, but always wound up giving up basically because I never found a good resource. I tried learning from crappy online tutorials (you know, like from the websites with the PHP tutorials that tell you it's ok to concatenate user-entered strings right into an SQL query?). I could never get a good grasp of OOP or what public static void meant, so I kept giving up.

Finally, in high school, after dabbling in PHP, some JS, a little K&R C here and there, I decided it was time to learn Java. And not only that, but I was going to take the AP Computer Science exam. Without taking the actual AP CS class. Oh yeah, and I decided to start in March, with the exam in early May. So I picked up a copy of Big Java and a few other texts, and borrowed a copy of the textbook that the AP CS class at my school used. Between those texts, some online resources, too much free time, and the pressure of having to learn Java + the marine biology case study in just two months, I finally learned Java.

I got a 5 on that exam (the AP exams are scored out of 5, for anyone who doesn't know), and have been a very motivated self-learner ever since.

dancavallaro
That certainly is one way of doing it. It would force you to actually sit down and learn everything.
Xesaniel
A: 

Understand that programming has little to do with language and everything to do with algorithm.

All of those nifty geegaws with memorable acronyms that folks have come up with over the years are just different ways of skinning the implementation cat. When you strip away all the OOPiness, RADology, Development Methodology 37, and Best Practice 42, you still have to deal with the basic algorithm building blocks of:

data structures

assignments

conditionals

iterations

control flow

I/O

Once you can truly wrap yourself around that, you'll eventually get to the point where you see (from a programming standpoint) little difference between writing an inventory app for an auto parts company, a graphical real-time TCP performance analyzer, a mathematical model of a stellar core, or an appointments calendar, and language choice becomes a question of how best can I implement this algorithm, given the tools available, and who's going to be doing maintenance.

All that aside, what's the hardest language to learn?

Your second one.

cookre
A: 

Hi, My tryst began when I was 10, in school

  • Started with GW BASIC, at the age of 10, and practiced at my home on my ZX Spectrum

  • Moved with VB 6.0 around 3 yrs later, when I got my hands on my first pentium Machine. (A Pentium 200Mhz MMX :) Created some nice interesting apps on it.

  • Started with C++ when I was 15, and gave full 2 years to it and LOVED it to the core.

  • Started along with HTML, VBscript & Javascript at the same time too

  • Picked on ANSI C and some Web Languages when was in College, started with ASP 3.0, then PHP 4.0

  • Learned Python 2.1 and PyS60 for Symbian

  • Learned Java 1.5 and JSP, and played around a bit with GamBAS and VC++ 6.0

  • Learned Shell Scripting and TCL/Tk, for some project requirements in my job.

  • Yeah, also learned SQL, sometime down the timeline. (if that qualifies to be a programming language)

Now i wish to begin with Ruby and LISP, they are just fascinating me nowadays and can't wait to put my hands on them

Mohit Nanda
+2  A: 

If you want to be a business application developer - a good command of English (or whatever your native language is) will take you a long way.

Tune and fine-tune your prose so that you always say what you mean. Learn to be concise and accurate. People who can do this will always command a premium over those who can't!

I was a far better coder than a writer for many years and my poor writing skills held me back. Learning how to express myself in plain words helped me in my coding.

FWIW my history is Basic, Assembler, Pascal, C/C++, Delphi (Pascal again), Java, SQL, Perl, Python, C#, Groovy.

Fortyrunner
A: 

Commodore 64 Basic -> First computer that I could program and play with to print graphics or do conversions or other simple functionality. This was the early to mid 1980s so the closest thing to a Web was to call in a BBS using a modem that had what would seem like a ridiculously slow transfer rate like 300 baud.

Watcom Basic, Watcom Pascal, Commodore PET Assembly -> High school computer science courses used this and so I got exposure to more things like sorting and arrays.

Pascal, Modula-3, C/C++, Scheme, Lisp -> University computer science course exposure here. Now we have build scripts and compilation parts to the code.

HTML -> University as a side thing since the Web was starting to become popular.

MFC and ISAPI extensions, T-SQL(MS-SQL) -> First job out of school used Visual Studio 6.0 to develop its server code and so I was immersed in it.

VBScript -> ASP replaced the C/C++ and propietary markup language used for the web previously.

C#.Net -> ASP.Net replaced ASP and another language got added to my roster

Javascript, J#, PL/SQL(Oracle), XML, Windows Script Host, XSMLT, CSS -> Other jobs have given me these skills that I use some of today depending on what I'm working with.

Most I use for web pages though sometimes I'll make a console application or class library for some functionality on some system.

JB King
A: 

BASIC: Summer class for schoolkids at local college.

Pascal: High school class.

C: College course.

LPC (precursor of Pike): Got involved in a MUD and worked from example.

C++: Got a compiler and figured it out from example.

HTML: Compiled and ran the first httpd at my college, so needed to see how to make one of those newfangled hyplans. (Who else remembers the term 'hyplan'? There's a bizarre linguistic dead-end for you.)

Perl: Read the camel book. (The pink-spined one.)

JavaScript: Ran into it whether I wanted to or not, so figured it out from example.

PHP: Started with rewriting Dreamweaver's autogenerated database interactivity code and learned it from there.

VB: Inherited a project written in it, so learned to use it kicking and screaming.

Java: Downloaded the JDK and an IDE, found a basic example (surprisingly difficult), and went from there.

chaos
A: 

I am still in high school. I began with HTML (not a programming language, of course) who-knows-when. I'll go with sixth or seventh grade. A little CSS followed.

Sometime during seventh grade, I began experimenting with PHP. By now, I can use PHP well and have significantly improved, but I am not well-versed in more advanced topics. I know no object-oriented programming, and am not clear on performance and code optimization.

About two and a half years ago, I started using SQL, but I am still far from learning the details. All I can do is use SQL to accomplish what I need to do.

In the past two years, I've been improving my CSS, and have started learning how to use jQuery.

Bryson
A: 

I've learned HTML, CSS and PHP by myself, before college. I did it because i was passionate about the web.

In college i had a C++ course, so i've learned C++ also, by myself.

Cumatru
A: 

BASIC: High school class (later supplemented with a college class & OJT for other dialects)

Pascal, (VAX) Assembler, FORTRAN, COBOL: College classes

C, Java: Night school

Perl: Quickie weekend seminar

JavaScript, Python, PHP, IDL: On the job.

DCL, sh: picked them up along the way to getting things done

PTBNL