views:

984

answers:

18

I never went to college as I always thought they didn't teach anything relative to what I wanted to learn, that is until now that I am older and I see what they actually do teach, I really regret not going as I only deal with PHP pretty much and looking at something like C# seems impossible for me to learn on my own now. I am just wondering if it is something that most people go to college to learn or learn on their own?

Anyone else start out with PHP and then learn C# on their own? Any advice, tips? I have glanced over the MS Dev center, still lost though.

+5  A: 

I never learned C# in University, and that's all I use right now (well not all, but most of my work is C#). I just learned it by starting a project and deciding it was worth trying. It took some getting used to: I literally accomplished almost nothing during my first week because I had to look everything up. But after a few months, the change had been totally worth it.

The main trick is this: Just start using it, and start now. Do a port of a simple program, or just a small "Hello, World!" and grow from there. It'll take time, but it's worth it.

Jon Dewees
+16  A: 

Being able to learning a specific, new programming language is probably not something where going to college will help tremendously. Many colleges don't even teach C# ...

However, going to college, and taking proper Computer Science classes will help you understand the core, fundamental concepts of programming. Once you understand the concepts behind any specific programming language, learning a new language is fairly simple. There are, of course, some exceptions (ie: learning a pure functional language is difficult until you grasp the concepts behind functional programming), but for the most part, that is the goal.

If you are serious about trying to learn C#, I recommend buying a good, solid book (or more than one) on C#. Most C# books walk you through the basics from step one, so you'll have better luck this way than trying to fish through reference documentation.

On the upside - once you do learn C#, you'll learn a lot of different skills and ways of thinking, and this will make learning other languages more simple. The object oriented concepts, and learning a static typed language, will only help all of your development skills, including your PHP development, since it will help you think about programming differently.

Reed Copsey
About "learning a pure functional language is difficult", I think it is not about the *language* per se, but it is about changing paradigms, a tremendously difficult task in any domain, not only software development.
Bruno Reis
good points thank you, books are still a great resource
jasondavis
Exactly. And this will be a change for the OP, since thinking in PHP is quite different than C#. Learning the different paradigms helps all development improve, though, since you learn to not take certain things for granted, etc.
Reed Copsey
Going to college just to learn C# would be a waste of money IMO. I taught myself C# with minimum background and consider myself decent at it now. It takes patience, and accepting to re-learn: don't try to reproduce your php code in C#. It's really like a human foreign language: it's initially incomprehensible, but you get it by practicing.I regret having no college education in CS for deeper topics; I am shallow in areas beyond language syntax, and wish I had learnt about operating systems, threading, compilers, ... and this is harder to catch up with on your own.
Mathias
+1  A: 

I would imagine that most programmers learn fundamentals in college, but since programming languages sprout up so quickly (and are constantly evolving), for the most part, they learn new languages on their own. C# and the .NET technologies complicated at first, but you can learn it piece by piece. I would highly suggest finding a good book on C# or ASP.NET programming; it's a MUCH better way to learn the .NET technologies than trying to piece together information online, in my opinion.

Jon
+21  A: 

First, if your age on your SO profile is correct, then you're still young and it's never too late to go back.

Second, colleges and universities usually don't teach how to use a specific programming language; that sort of instruction is left for the trade schools and technical institutes. Instead, you will learn the fundamentals of the field you've chosen (ie. computer science or computer engineering), you will learn how to think and solve problems, and you will learn about different aspects of your field that you may have never known existed.

Greg Hewgill
Not exactly true, they typically require you to do your work in some language or another. Years ago, that language was Pascal, but more and more it's become Java and even more recently C#. So yes, you do learn a language, but that's a side effect of the actual learning.
Mystere Man
In my experience, we were certainly expected to *learn* languages for use in implementation, but we were not explicitly *taught* those languages. If I'm remembering correctly, we used Pascal, FORTRAN, assembly language, COBOL, Oberon, and C.
Greg Hewgill
From second year on, on the first day of a course the tutor would tell us what language we would be using. That's all the language specific instruction we were given.
Michael Robinson
+4  A: 

I just finished my BS in Computer Science from UC San Diego two years ago, and while I was there, they didn't offer a single course on C#.

I learned C# from books and my first job.

Kyle
I found C# as an easy language to teach myself and within a few months you have it for the most part mastered(neglecting Linq and other weirdness)... I knew C and C++ pretty well before I started C#, and I was writing usable/production code in 2 weeks or so. PHP will be a bigger jump, but it shouldn't take too long if you keep at it. Biggest hurdle will be strong vs. weak typing.
Earlz
+2  A: 

I have a BS in CS and I did have a class that was part C#. It was called programming languages and we also learned Scheme, Prolog, ML, Fortress and Lisp. The classes main purpose was to teach language independent basics like grammars, as well as the pro's and cons of different languages(functional vs. procedural), etc.

The class was incredibly hard and time consuming but you came out knowing the difference's between the language types. You also clearly saw the similarities in languages, which is a huge help. Learning new languages was then much easier.

This is something you get when you get a CS degree from a reputable school. I hope that helps. But the same can be had from reading the Sebesta text.

If you are asking if I learned any specific language in college fully, the answer is no. I learned every language by myself and had the professors teach us the non language specifics, like data structures and abstract data types. In CS1 you may be taught a language more then in your future classes, but you still need a lot of self learning. I learned a good bit of Java, but seemed to quickly forget it in favour of C. I like C a lot better.

I think a CS degree is highly worth it, not for job prospects but for teaching you to think properly. Many CS departments are part of engineering departments and share a very similar curriculum. My degree said I have a engineering degree, I graduated with engineers and was able to do anything they did. Engineering degree's are hard enough as is, so I found my most benefit from those engineering classes.

There are also really weak CS programs, and you can tell if a program is weak by the amount of math they require. A strong program would have at minimum Calculus 1-3, Discreet Math/Finite Logic, Linear Algebra, Differential Equations and Calculus Based Probability.

Recursion
Id also mention that you dont need school, you just need dedication and persistence to teach yourself.
Recursion
A: 

Honestly, the idea of learning a specific language in a college setting seems strange to me*. What happens when the world moves forward with new languages (as seems to happen often)? Go back to college? As I mentioned elsewhere on SO recently, I think it's easier than ever to learn a programming language (heck, anything!) with only what is available online and free.

*You may wish to take my opinion with a grain of salt as my college experience was...very short-lived.

Daniel Pratt
+1  A: 

I think you can do it, Here is what you have to do.

  1. Don't think too far, start understanding small stuff.
  2. Believe that, its just the matter of time.
  3. Read and Practice.
waheed
+4  A: 

Most C.S. programs I have heard of, including the one that gave me my B.S., use programming languages as tools to teach computer science concepts (data structures, recursion, state machines, closures, etc) rather than explicitly teaching programming languages themselves.

It's kind of assumed in academia that people there are capable of learning the basics of a new programming language pretty much on the fly in order to solve a problem. Certainly in my degree program I was forced to write at least a little bit of code in a dozen or so languages. Once you get to the point where you can look at a new language and say "Oh, this looks really similar to Haskell but it has dynamic typing" or "Oh, this is pretty much just C but scripted instead of compiled" you can pick up new languages without much trouble.

I can't imagine anyone thinking that learning their first (or second, or third) language was easy. I also don't think you can really be a good programmer, or at least understand the broad concepts present in programming languages, without learning at least three.

Many people are saying you should buy a C# book. I disagree -- start by working through online tutorials like this one: http://www.csharp-station.com/Tutorial.aspx

Then pick a project and go to work on it.

Daniel Coffman
A: 

Go to college to learn about data structures, algorithms, computational complexity, compiler design, and writing OSes from scratch.

Don't go to learn a language, it'll be a waste of your time and money. You're better off spending $30 or $50 on Amazon for a nice book and learn everything you need to know in a few weeks. Learn the basics of at least one ORM and IoC framework, build up your resume with buzzword compliant technologies (web services + LINQ + MVC), and you'll be employable somewhere.

I really regret not going as I only deal with PHP pretty much and looking at something like C# seems impossible for me to learn on my own now.

You know, it really depends on where you go. Good universities are heavy on C++, Assembly, ML, Lisp, and occasionally even Haskell. Crappy universities, like the one I went to, are basically asking you to spend $20k on a glorified Java certification.

Most employers will substitute work experience for a college degree. You may not be able to command the highest wage for your first .NET job, but after a year or so you'll be able to command right around the median salary for a good mid- to senior-level dev in your area.

Juliet
Ive taken up to graduate level classes in OS internals and never approached the level of implementing a full OS from scratch. Im a Linux kernel dev and still don't understand everything to be able to do such. Its just way to much info to be taught in a single class, let alone 5.I can understand if you want to write a boot strap or something, but a full OS? Did you mean a embedded system, maybe I can believe that?
Recursion
+3  A: 

I think in the end it boils down to how dedicated you are. Since I was 12, I've been teaching myself C, C++, Ruby, Python, PHP, JavaScript, OpenGL, BSD Sockets, etc etc...

While I may not be completely professional with them, I have a quite good grasp of how to use them for anything I'd really need to do. So in the end, whether or not you can learn a language is measured only in how long you are willing to spend trying.

Two Tips:

  • Always do every exercise in a book, no matter how trivial.
  • When you finish a chapter, give yourself a challenge.

In addition, once you learn one language, you've crossed the biggest gap. Most people stumble and fall flat on their first language because they simply can't understand the logic or concept of how programming works, even though its something that in the end, is almost natural. It's analogous to verb conjugations in a way. Once you can conjugate verbs fluently or even just well in Spanish, learning Italian or French won't be much a problem.

Good luck!

revenantphoenix
+1  A: 

I first used VB for Access 2000. Access 2000 has a comprehensive help database. That got me started in VB.NET and introduced me to VS. I picked up PHP, with it's comprehensive website, php.net. C# is not too much different than PHP, and so is somewhat easier since I know PHP. It is different though, and SO has helped quite a bit. I use Visual Studio C# 2005, although 2008 is better. I use 2005 because I want to use .NET 2.0. Otherwise I would use 2008.

Update: I made a lot of Console Apps as they are easier to code and less problematic.

Console.Writeline("Hello World");
Console.Readline();
//End of script

I made more than just that, but that is all you need in a console application. Actually, not even that is required, but that is the simplest that is useful.

Concerning your question, Yes. I learned PHP on my own, then went to C#. PHP seems to be a mixture of C# and Javascript and a few other odds and ends. Visual Studio, like I said, has really helped me.

Arlen Beiler
VS 2008 allows you to use .NET 2.0. I do most of my development in VS 2008 using .NET 2.0...
Zach Johnson
I use the express version
Arlen Beiler
I use C# 2008 Express edition, and you CAN target .Net 2.0. Right click on your project in the Solution Explorer -> Properties -> Application -> Target Framework -> .NET Framework 2.0
Daniel S
http://stackoverflow.com/questions/770929
Arlen Beiler
+6  A: 

No.

College is for learning algorithms, data structures, fundamentals of computation, fundamentals of languages, software engineering, and gathering a general education in how to think and learn on your own[*]

  • Ideally. Not all schools perform at this level.
Paul Nathan
All good schools will teach lots of math and Lisp. If your school meets those you have a winner.
Recursion
A: 

If you wished, you could sign up at a local college and take just one class, one that offers something that is taught using C#. You'll learn the C# and much more. It's never a bad idea to continue your education, and some people do learn better in a structured setting.

thursdaysgeek
A: 

I'm currently in a MS program for Computer Science, what they taught us as undergrads was not specific languages (though the "260-262" foundation classes were specific languages, either Fortran, Java, or C++. Mostly C++ as they used it to teach data structures and algorithms. Later on they delved into Python and Bash scripting and such, but mostly the focus was always on application.

It's certainly possible to learn C# on your own. I'd start with C++ and get a little familiar with it, then jump into C#. Or start right at C#, just find a project you love. Find something you can personally develop and which will drive your willingness to continue learning and exploring.

Xorlev
+1  A: 

You certainly do not require a University degree to learn C#, and as pointed out by other people Universities generally do not teach Computer Science courses with learning a programming language as the main aim. At my own University, they do an introduction to programming course in Java, and then when later papers wish to cover material in other languages it is often up to the students themselves to do most the leg work to self learn the material.

As for the difficulty of learning C# as a language, its not all that bad. If you went from C# to PHP you could feel just as lost initially with the transition. But the two languages are not so fundamentally different that one would not help when learning the other. But even if you had no knowledge of PHP, I would still say you could quite successfully learn how to code in C# on your own. Just start with the basics and don't jump into the deep end. The .NET library is huge, so it is easy to get bogged down in looking up what different function calls do. If you are looking to learn C# for ASP.Net, don't jump in with the web programming straight away, do some basic console applications first and just code some basic examples.

Jacob Bellamy
+1  A: 

$50 for a few C# books and a Visual Studio Express (free) are all you really need to start learning C#. There's also the internet. You can learn a language pretty easily by yourself. Any of the best books on amazon are likely to be used as the text for college courses.

Like so many others have said, college is for learning the problem solving and design aspects of software development. If you're weak in that aspect, it might be good to look at auditing or taking a few college course. You might even be able to get an employer to pay for it.

Benny Jobigan
+1  A: 

I'm in a pretty similar situation. I started out with PHP and JavaScript too, and didn't go to school for programming. However, I've found software development is what I'm really interested in, and I regret not spending my 20s doing that instead.

Overall, the concepts in PHP are similar to C# or Java. You're dealing with types, classes, variables, inheritance, iterables, algorithms and logic in the same way.It's just that PHP is a lot more tolerant and less precise.

I haven't tried C#, but have worked a bit with Java and I have found moving from a language as flexible as PHP to Java isn't easy. I realized that despite the similarities to languages I know, learning something like Java does require concerted effort and I can't just blunder my way into it.

I remember when I was baffled by PHP, I'm sure you do - you have to approach it the same way as you learned back then. Start out with basic tutorials, and find a simple project or two you want to write in C#. The more you use it, the better you'll get just like anything else. It seems overwhelming a bit at first, but anything can be accomplished when you take it bit by bit.

It might be a few years before you have any idea what exactly a Inversion of Control Container is or why you'd ever need one, but I don't see any reason why you can't learn on your own with books and internet resources. Of course, also Stack Overflow has a huge C# community that I'm sure would be happy to help!

That said, you're not too old to go to college if that's what you want to do. I'd love to attend a school for this myself. I've found in my other pursuits that having a good teacher show you how to do something is indispensable, and can provide much deeper understanding more quickly compared to learning on your own.

Alex JL